Créer un maillage et une scène 3D
Créer un maillage de cube 3D
Un Mesh
est défini par un ensemble de points de contrôle et les nombreux polygones à n côtés selon les besoins. Cet article explique comment définir un Mesh
.
Pour créer une surface Mesh
, nous devons définir les points de contrôle et les polygones comme suit:
Voici un exemple pour attacher un matériau Phong au nœud cube:
Définir les points de contrôle
Un maillage est composé d’un ensemble de points de contrôle dans l’espace et de polygones pour décrire la surface maillée, pour créer un maillage, nous devons définir les points de contrôle:
Vector4
au lieu de Vector3 dans l’exemple de code.
Exemple:
// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET | |
// Initialize control points | |
Vector4[] controlPoints = new Vector4[] | |
{ | |
new Vector4( -5.0, 0.0, 5.0, 1.0), | |
new Vector4( 5.0, 0.0, 5.0, 1.0), | |
new Vector4( 5.0, 10.0, 5.0, 1.0), | |
new Vector4( -5.0, 10.0, 5.0, 1.0), | |
new Vector4( -5.0, 0.0, -5.0, 1.0), | |
new Vector4( 5.0, 0.0, -5.0, 1.0), | |
new Vector4( 5.0, 10.0, -5.0, 1.0), | |
new Vector4( -5.0, 10.0, -5.0, 1.0) | |
}; |
Créer des polygones
Les points de contrôle ne sont pas rendables, pour rendre le cube visible, nous devons définir des polygones de chaque côté:
// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET | |
Vector4[] controlPoints = DefineControlPoints(); | |
// Initialize mesh object | |
Mesh mesh = new Mesh(); | |
// Add control points to the mesh | |
mesh.ControlPoints.AddRange(controlPoints); | |
// Create polygons to mesh | |
// Front face (Z+) | |
mesh.CreatePolygon(new int[] { 0, 1, 2, 3 }); | |
// Right side (X+) | |
mesh.CreatePolygon(new int[] { 1, 5, 6, 2 }); | |
// Back face (Z-) | |
mesh.CreatePolygon(new int[] { 5, 4, 7, 6 }); | |
// Left side (X-) | |
mesh.CreatePolygon(new int[] { 4, 0, 3, 7 }); | |
// Bottom face (Y-) | |
mesh.CreatePolygon(new int[] { 0, 4, 5, 1 }); | |
// Top face (Y+) | |
mesh.CreatePolygon(new int[] { 3, 2, 6, 7 }); |
Créer des polygones avec PolygonBuilder Classe
Nous pouvons également définir polygone par sommets avec la classe PolygonBuilder
:
// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET | |
Vector4[] controlPoints = DefineControlPoints(); | |
// Initialize mesh object | |
Mesh mesh = new Mesh(); | |
// Add control points to the mesh | |
mesh.ControlPoints.AddRange(controlPoints); | |
// Indices of the vertices per each polygon | |
int[] indices = new int[] | |
{ | |
0,1,2,3, // Front face (Z+) | |
1,5,6,2, // Right side (X+) | |
5,4,7,6, // Back face (Z-) | |
4,0,3,7, // Left side (X-) | |
0,4,5,1, // Bottom face (Y-) | |
3,2,6,7 // Top face (Y+) | |
}; | |
int vertexId = 0; | |
PolygonBuilder builder = new PolygonBuilder(mesh); | |
for (int face = 0; face < 6; face++) | |
{ | |
// Start defining a new polygon | |
builder.Begin(); | |
for (int v = 0; v < 4; v++) | |
// The indice of vertice per each polygon | |
builder.AddVertex(indices[vertexId++]); | |
// Finished one polygon | |
builder.End(); | |
} | |
Maintenant, c’est fini, pour rendre le maillage visible, nous devons préparer un nœud pour cela.
Comment trianguler un maillage
Le maillage triangulé est utile pour l’industrie du jeu car le triangulaire est la seule primitive prise en charge par le matériel GPU (les données non triangulaires sont triangulées au niveau du pilote, ce qui est inefficace en temps réel)
Dans cet exemple, nous triangulons un Mesh en important un fichier FBX et le sauvegardons au format FBX.
// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET | |
// The path to the documents directory. | |
// Initialize scene object | |
Scene scene = Scene.FromFile("document.fbx"); | |
scene.RootNode.Accept(delegate(Node node) | |
{ | |
Mesh mesh = node.GetEntity<Mesh>(); | |
if (mesh != null) | |
{ | |
// Triangulate the mesh | |
Mesh newMesh = PolygonModifier.Triangulate(mesh); | |
// Replace the old mesh | |
node.Entity = mesh; | |
} | |
return true; | |
}); | |
scene.Save("document.fbx"); |
Créer une scène de cube 3D
Cette rubrique montre comment ajouter une géométrie de maillage à la scène 3D. L’exemple de code place un cube et enregistre la scène 3D dans les formats de fichier pris en charge.
Créer un nœud cube
Un nœud est invisible, mais la géométrie attachée au nœud peut être rendue.
Mesh
est utilisé dans le code. Nous pouvons Créer un objet de classe Mesh tel que raconté là-bas.
Exemple
// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET | |
// Initialize scene object | |
Scene scene = new Scene(); | |
// Initialize Node class object | |
Node cubeNode = new Node("cube"); | |
// Call Common class create mesh using polygon builder method to set mesh instance | |
Mesh mesh = Common.CreateMeshUsingPolygonBuilder(); | |
// Point node to the Mesh geometry | |
cubeNode.Entity = mesh; | |
// Add Node to a scene | |
scene.RootNode.ChildNodes.Add(cubeNode); | |
// Save 3D scene in the supported file formats | |
scene.Save("CubeScene.fbx"); |