0

プログラムでメッシュオブジェクトを作成するのに苦労しています。これは完全に機能しています:

CC3MeshNode *pMeshBox = [[CC3MeshNode alloc] init];
[pMeshBox populateAsCenteredRectangleWithSize:CGSizeMake(3, 3) andTessellation:ccg(5, 0)];    // AsSphereWithRadius:1 andTessellation:ccg(5, 0)];     // edges, rounded-corners
[self addChild:pMeshBox];
[pMeshBox release];

しかし、これは何も表示しません(x / z方向にスポーンする高さ0の平らな正方形を期待しています)。


float fPolygonVertices[] = {
    -3, 0,  3,
     3, 0,  3,
     3, 0, -3,
    -3, 0, -3
};

CC3VertexLocations* pvlPolygon = [CC3VertexLocations vertexArrayWithName: @"PolygonVL"];
pvlPolygon.vertexCount = 4;
pvlPolygon.vertices = fPolygonVertices;

CC3VertexArrayMesh* pvamPolygon = [CC3VertexArrayMesh meshWithName:@"PolygonM"];
pvamPolygon.vertexLocations = pvlPolygon;

CC3MeshNode *pMeshNode = [[CC3MeshNode alloc] init];
pMeshNode.mesh = pvamPolygon;

ccColor3B color = { 50, 0, 200 };
pMeshNode.color = color;

[self addChild:pMeshNode];
[pMeshNode release];

シーンにはpopulateAsCenteredRectangleWithSizeで作成されたオブジェクトが表示されているため、カメラの設定とその他すべてが正しいと想定しています...

色や素材の設定をいろいろ試してみましたが、運が悪かったです。

4

1 に答える 1

1

これを試して:

GLuint totalVertexCount = 4;
GLuint triangleCount = 2;

CC3MeshNode *pMeshNode = [[CC3MeshNode alloc] init];
//[pMeshNode setPureColor:color];
//[pMeshNode setIsTouchEnabled:YES];

CC3VertexArrayMesh* theArrayMesh = [pMeshNode prepareParametricMesh];
// Prepare the vertex content and allocate space for vertices and indices.
[theArrayMesh ensureVertexContent];
theArrayMesh.allocatedVertexCapacity = totalVertexCount;
theArrayMesh.allocatedVertexIndexCapacity = (triangleCount * 3);
GLushort* indices = theArrayMesh.vertexIndices.vertices;

/*         
 *  1-------0
 *  |      /|   -z 
 *  |     / |    ⥣
 *  |    /  |     =>+x
 *  |   /   |
 *  |  /    |
 *  | /     |
 *  |/      |
 *  2-------3
 */
{
    [theArrayMesh setVertexLocation: cc3v(3, 0, -3) at: 0];
    [theArrayMesh setVertexLocation: cc3v(-3, 0, -3) at: 1];
    [theArrayMesh setVertexLocation: cc3v(-3, 0, 3) at: 2];
    [theArrayMesh setVertexLocation: cc3v(3, 0, 3) at: 3];

}
GLubyte indxIndx = 0;
GLubyte vtxIndx = 0;
for (int side = 0; side < 1; side++) {
    // First trangle of side - CCW from bottom left
    indices[indxIndx++] = vtxIndx++;        // vertex 0
    indices[indxIndx++] = vtxIndx++;        // vertex 1
    indices[indxIndx++] = vtxIndx;          // vertex 2

    // Second triangle of side - CCW from bottom left
    indices[indxIndx++] = vtxIndx++;        // vertex 2
    indices[indxIndx++] = vtxIndx++;        // vertex 3
    indices[indxIndx++] = (vtxIndx - 4);    // vertex 0
}

[self addChild:pMeshNode];
于 2013-03-12T03:44:58.040 に答える