إنشاء 3D شبكة ومشهد
إنشاء شبكة مكعبة 3D
A Mesh
is defined by a set of control points and the many n-sided polygons as needed. This article explains how to define a Mesh
.
لإنشاء سطح Mesh
، نحتاج إلى تحديد نقاط التحكم والمضلعات على النحو التالي:
Here مثال على إرفاق مادة هونغ Pإلى عقدة مكعب:
Define Cأونتول oin
يتكون شبكة A من قبل مجموعة من نقاط التحكم في الفضاء ، والمضلعات لوصف سطح الشبكة ، لإنشاء شبكة ، ونحن بحاجة إلى تحديد نقاط التحكم:
Vector4
بدلاً من Vector3
في رمز المثال.
Example:
// Initialize control points | |
Vector4List controlPoints = new Vector4List(8); | |
controlPoints.add(new Vector4( -5.0, 0.0, 5.0, 1.0)); | |
controlPoints.add(new Vector4( 5.0, 0.0, 5.0, 1.0)); | |
controlPoints.add(new Vector4( 5.0, 10.0, 5.0, 1.0)); | |
controlPoints.add(new Vector4( -5.0, 10.0, 5.0, 1.0)); | |
controlPoints.add(new Vector4( -5.0, 0.0, -5.0, 1.0)); | |
controlPoints.add(new Vector4( 5.0, 0.0, -5.0, 1.0)); | |
controlPoints.add(new Vector4( 5.0, 10.0, -5.0, 1.0)); | |
controlPoints.add(new Vector4( -5.0, 10.0, -5.0, 1.0)); |
Olyreate olyأوليغونز
Tانه نقاط التحكم ليست قابلة للتأجير ، لجعل مكعب مرئية ، ونحن بحاجة إلى تحديد المضلعات في كل جانب:
List<Vector4> controlPoints = defineControlPoints(); | |
// Initialize mesh object | |
Mesh mesh = new Mesh(); | |
// Add control points to the mesh | |
mesh.getControlPoints().addAll(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 }); |
إنشاء مضلعات بفئة PolygonBuilder
يمكننا أيضًا تحديد المضلع بواسطة الرؤوس بفئة PolygonBuilder:
List<Vector4> controlPoints = defineControlPoints(); | |
// Initialize mesh object | |
Mesh mesh = new Mesh(); | |
// Add control points to the mesh | |
mesh.getControlPoints().addAll(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(); | |
} |
Now انها الانتهاء ، لجعل شبكة مرئية ، ونحن بحاجة إلى إعداد عقدة لذلك.
How إلى ririesh
شبكة ريانغتوليت غير مفيدة لصناعة اللعبة لأن الثلاثي هو البدائية الوحيدة المدعومة التي تدعم الأجهزة GPU (يتم تقسيم البيانات غير الثلاثية في مستوى السائق ، وهو غير فعال في تقديم في الوقت الحقيقي)
في هذا المثال ، نقوم بتثليث شبكة من خلال استيراد ملف FBX وحفظه بتنسيق FBX.
// The path to the documents directory. | |
String MyDir = RunExamples.getDataDir(); | |
// Initialize scene object | |
Scene scene = new Scene(); | |
scene.open(MyDir + "document.fbx"); | |
scene.getRootNode().accept(new NodeVisitor() { | |
@Override | |
public boolean call(Node node) { | |
Mesh mesh = (Mesh)node.getEntity(); | |
if (mesh != null) | |
{ | |
// Triangulate the mesh | |
Mesh newMesh = PolygonModifier.triangulate(mesh); | |
// Replace the old mesh | |
node.setEntity(newMesh); | |
} | |
return true; | |
} | |
}); | |
MyDir = MyDir + RunExamples.getOutputFilePath("document.fbx"); | |
scene.save(MyDir, FileFormat.FBX7400ASCII); |
إنشاء مشهد مكعبات 3D
يوضح هذا الموضوع كيفية إضافة هندسة شبكية إلى مشهد 3D. يضع رمز المثال مكعبًا ويحفظ مشهد 3D في تنسيقات الملفات المدعومة.
Rereate Cube oode
عقدة A غير مرئية ، ولكن يمكن تقديم الهندسة المرفقة بالعقدة.
Example:
// 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.setEntity(mesh); | |
// Add Node to a scene | |
scene.getRootNode().getChildNodes().add(cubeNode); | |
// The path to the documents directory. | |
String MyDir = RunExamples.getDataDir(); | |
MyDir = MyDir + RunExamples.getOutputFilePath("CubeScene.fbx"); | |
// Save 3D scene in the supported file formats | |
scene.save(MyDir, FileFormat.FBX7400ASCII); |