我正在进入我的第一款3D游戏。我正在使用blender创建我的模型,使用物理项目符号和Isgl3D游戏引擎。
到目前为止,我能够
现在我想创建一些复杂的不规则模型,并沿着该模型的顶点创建物理刚体。根据我的研究,我发现btTriangleMesh
和btBvhTriangleMeshShape
可以用来创建复杂的物理刚体。
我发现this线程,其中使用POD导入器从混合器导出的模型的顶点创建子弹物理主体。但他们使用btConvexHullShape
来创建刚体,这在我的情况下可能不起作用,因为我的要求具有不规则的复杂模型。
所以我试图沿着模型的顶点创建一个btTriangleMesh
,这样我就可以创建一个btBvhTriangleMeshShape
来创建我的刚体。
因此,对于初学者,我导出了一个立方体(默认的混合立方体,放置在原点),以了解顶点如何存储在Isgl3dMeshNode
结构中。这是我的代码
Isgl3dPODImporter * podImporter = [Isgl3dPODImporter
podImporterWithFile:@"simpleCube.pod"];
NSLog(@"number of meshes : %d", podImporter.numberOfMeshes);
[podImporter buildSceneObjects];
[podImporter addMeshesToScene:self.scene];
Isgl3dMeshNode * ground = [podImporter meshNodeWithName:@"Cube"];
btCollisionShape *groundShape = [self getCollisionShapeForNode:ground];
我的getCollisionShapeForNode
方法
- (btCollisionShape*) getCollisionShapeForNode: (Isgl3dMeshNode*)node{
int numVertices = node.mesh.numberOfVertices;
NSLog(@"no of vertices : %d", numVertices);
NSLog(@"no of indices : %d", node.mesh.numberOfElements);
unsigned char * indices = node.mesh.indices;
btCollisionShape* collisionShape = nil;
btTriangleMesh* triangleMesh = new btTriangleMesh();
for (int i = 0; i < node.mesh.numberOfElements; i+=3) {
NSLog(@"%d %d %d", indices[i], indices[i+1], indices[i+2]);
}
}
NSLog语句打印..
网格数:1
没有顶点:24
没有指数:36
和索引打印为
20 0 21
0 22 0
20 0 22
0 23 0
16 0 17
0 18 0
16 0 18
0 19 0
12 0 13
0 14 0
12 0 14
0 15 0
我不确定我是否理解上面给出的索引(以及它指向的顶点)如何构成立方体中的12个三角形(每个阶段中有两个)。我希望指数是这样的(如下所示)
20 21 22 //phase 6
20 22 23
16 17 18 //phase 5
16 18 19
12 13 14 //phase 4
12 14 15
8 9 10 //phase 3
8 10 11
4 5 6 //phase 2
4 6 7
0 1 2 //phase 1
0 2 3
可能我错过了一些明显的东西。但是我有时会坚持这个。
任何人都知道从.POD文件导出的索引与普通三角形索引的不同之处。我现在无法通过索引制作立方体。
另外一个问题,是否有人有一个示例代码可以创建三角形网格来创建物理刚体。