将blender模型导出到iOS并沿顶点创建物理实体

时间:2013-07-08 07:21:46

标签: ios 3d indices bulletphysics isgl3d

我正在进入我的第一款3D游戏。我正在使用blender创建我的模型,使用物理项目符号和Isgl3D游戏引擎。

到目前为止,我能够

  1. 在blender中创建模型
  2. 使用Isgl3D库将其导出到iPhone并显示它们。
  3. 沿着这个模型的顶点创建物理实体(简单来说) 像立方体和球体的模型。)
  4. 现在我想创建一些复杂的不规则模型,并沿着该模型的顶点创建物理刚体。根据我的研究,我发现btTriangleMeshbtBvhTriangleMeshShape可以用来创建复杂的物理刚体。

    我发现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文件导出的索引与普通三角形索引的不同之处。我现在无法通过索引制作立方体。

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

0 个答案:

没有答案