4

重複して申し訳ありませんが、何時間もグーグルで検索しましたが、結果はありません。

コンバーターからエクスポートされた単純なキューブのこの (最適化された) データがあります。

// 8 Verticies
// 4 Texture Coordinates
// 6 Normals
// 12 Triangles

static GLshort cubeFace_indicies[12][9] = {
    // Box001
    {2,0,3 ,0,0,0 ,0,1,2 }, {1,3,0 ,0,0,0 ,3,2,1 }, {5,4,7 ,1,1,1 ,1,3,0 },
    {6,7,4 ,1,1,1 ,2,0,3 }, {1,0,5 ,2,2,2 ,1,3,0 }, {4,5,0 ,2,2,2 ,2,0,3 },
    {3,1,7 ,3,3,3 ,1,3,0 }, {5,7,1 ,3,3,3 ,2,0,3 }, {2,3,6 ,4,4,4 ,1,3,0 },
    {7,6,3 ,4,4,4 ,2,0,3 }, {0,2,4 ,5,5,5 ,1,3,0 }, {6,4,2 ,5,5,5 ,2,0,3 }
};
static GLfloat cubeVertices [8][3] = {
    {-100.0f,-100.0f,-100.0f},{100.0f,-100.0f,-100.0f},{-100.0f,100.0f,-100.0f},
    {100.0f,100.0f,-100.0f},{-100.0f,-100.0f,100.0f},{100.0f,-100.0f,100.0f},
    {-100.0f,100.0f,100.0f},{100.0f,100.0f,100.0f}
};
static GLfloat cubeNormals [6][3] = {
    {0.0f,0.0f,1.0f},{0.0f,0.0f,-1.0f},{0.0f,1.0f,0.0f},
    {-1.0f,0.0f,0.0f},{0.0f,-1.0f,0.0f},{1.0f,0.0f,0.0f}
};
static GLfloat cubeTextures [4][2] = {
    {1.0f,2.0f},{1.0f,1.0f},{0.0f,2.0f},
    {0.0f,1.0f}
};

テクスチャが設定されていて、画面に何かを見たいと思っています。以下の私の最近の描画コード:

glTexCoordPointer(2, GL_FLOAT, 0, cubeTextures);
glVertexPointer(3, GL_FLOAT, 0, cubeVertices);
glNormalPointer(GL_FLOAT, 0, cubeNormals);
glBindTexture(GL_TEXTURE_2D, textures[0]);

    glDrawElements(GL_TRIANGLES , 12, GL_SHORT, cubeFace_indicies);
4

2 に答える 2

5

OpenGL ES(および通常のOpenGL)のインデックスデータは、使用している方法では機能しません。位置、法線、およびテクスチャ座標に対して頂点ごとに個別のインデックスを提供するのではなく、単一のインデックスiを提供すると、OpenGLESは有効な各頂点配列から要素iを取得します。これは、現在の表現で作成したすべての頂点-法線-texcoordの組み合わせに対して個別のインデックスが必要になることを意味します。これには、データを少し複製する必要がある場合があります。

モデルをフラットシェーディングで描画できる場合(つまり、glShadeModel(GL_FLAT)描画する前に呼び出すことができる場合)、指定する一意のポイントを少なくすることができる場合があります。その場合、三角形の最後の頂点からの法線が三角形全体に使用されます。もちろん、これにはインデックスの注意深い順序付けが必要です。

于 2010-07-02T07:02:51.533 に答える
0

glDrawArrays を使用するには、glEnableClientState(GL_VERTEX_ARRAY) で GL_VERTEX_ARRAY 状態を有効にしてから、glVertexPointer(3, GL_FLOAT, 0, ) で各頂点を作成する必要があります。

于 2010-06-27T00:07:01.927 に答える