1

我进入了我的第一个 3D 游戏。我正在使用搅拌机来创建我的模型,使用子弹进行物理和 Isgl3D 游戏引擎。

到目前为止,我能够

  1. 在搅拌机中创建模型
  2. 使用 Isgl3D 库将其导出到 iPhone 并显示它们。
  3. 沿此模型的顶点创建物理体(对于立方体和球体等简单模型。)

现在我想创建一些复杂的不规则模型,并沿着该模型的顶点创建物理刚体。btTriangleMesh从我的研究中,我发现btBvhTriangleMeshShape它可以用来创建复杂的物理刚体。

我找到了这个线程,其中子弹物理体是沿着使用 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 文件导出的索引与普通三角形索引有何不同。我不可能从现在打印的索引中制作一个立方体。

还有一个问题,有没有人有一个示例代码可以创建三角形网格来创建物理刚体。

4

0 回答 0