1

初めての 3D ゲームに夢中です。ブレンダーを使用してモデルを作成し、弾丸を物理演算に使用し、Isgl3D ゲーム エンジンを使用しています。

これまでのところ、私はできる

  1. Blender でモデルを作成する
  2. Isgl3D ライブラリを使用して iPhone にエクスポートし、表示します。
  3. このモデルの頂点に沿って物理ボディを作成します (立方体や球体などの単純なモデルの場合)。

ここで、複雑な不規則なモデルをいくつか作成し、そのモデルの頂点に沿って物理的な剛体を作成したいと考えています。私の研究から、複雑な物理の剛体を作成するために使用できるbtTriangleMeshとを見つけました。btBvhTriangleMeshShape

POD インポーターを使用してブレンダーからエクスポートされたモデルの頂点に沿って弾丸の物理ボディが作成されるこのスレッドを見つけました。しかし、それらbtConvexHullShapeは剛体の作成に使用されますが、私の要件には不規則で複雑なモデルがあるため、私の場合は機能しない可能性があります。

そのため、剛体を作成するために を作成btTriangleMeshできるように、モデルの頂点に沿ってを作成しようとしていました。btBvhTriangleMeshShape

そこでまず、頂点が構造にどのように格納されているかを理解するために、立方体 (原点に配置されたデフォルトの Blender 立方体) をエクスポートしました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 個の三角形 (各フェーズに 2 個) を構成する方法を理解できません。インデックスはこのようなものになると思います(以下に示します)

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