Split Mesh
Split all Meshes of Scene Per Material
Aspose.3D for Java API has support to split all meshes of a scene into several sub meshes per material. The SplitMesh method will not split a mesh of the scene, if it has been assigned a single material. It can be achieved by using Aspose.3D for Java API.
SplitMeshPolicy
enum specifies the data policy used in mesh splitting algorithm, it supports two policies, share data between sub-meshes or each sub-mesh has its own data (only used data).
The code sample below splits all meshes of a scene per material. Each sub mesh shares the same direct data and only differs in indices.
// The path to the documents directory. | |
String MyDir = RunExamples.getDataDir(); | |
MyDir = MyDir + "test.fbx"; | |
// Load a 3D file | |
Scene scene = new Scene(MyDir); | |
// Split all meshes | |
PolygonModifier.splitMesh(scene, SplitMeshPolicy.CLONE_DATA); | |
// Save file | |
MyDir = RunExamples.getDataDir() + RunExamples.getOutputFilePath("test-splitted.fbx"); | |
scene.save(MyDir, FileFormat.FBX7500ASCII); |
Split a Mesh by Specifying the Material
Aspose.3D for Java API has support to split a mesh by manually specifying the material. The split mesh option creates separate objects and each sub mesh will use only one material.
Split Mesh of Box
This help topic creates a mesh of the box to keep the code comprehensive and short. Developers may construct a mesh manually as narrated in this help topic: Create a 3D Cube Mesh. Furthermore, a box is composed by 6 planes and each plane will become a sub mesh. The code sample below splits a primitive mesh by manually specifying material.
// Create a mesh of box(A box is composed by 6 planes) | |
Mesh box = (new Box()).toMesh(); | |
// Create a material element on this mesh | |
VertexElementMaterial mat = (VertexElementMaterial) box.createElement(VertexElementType.MATERIAL, MappingMode.POLYGON, ReferenceMode.INDEX); | |
// and specify different material index for each plane | |
mat.setIndices(new int[]{0, 1, 2, 3, 4, 5}); | |
// Now split it into 6 sub meshes, we specified 6 different materials on each plane, each plane will become a sub mesh. | |
// We used the CloneData policy, each plane will has the same control point information or control point-based vertex element information. | |
Mesh[] planes = PolygonModifier.splitMesh(box, SplitMeshPolicy.CLONE_DATA); | |
mat.getIndices().clear(); | |
mat.setIndices(new int[]{0, 0, 0, 1, 1, 1}); | |
// Now split it into 2 sub meshes, first mesh will contains 0/1/2 planes, and second mesh will contains the 3/4/5th planes. | |
// We used the CompactData policy, each plane will has its own control point information or control point-based vertex element information. | |
planes = PolygonModifier.splitMesh(box, SplitMeshPolicy.COMPACT_DATA); |