2

面ごとに異なるテクスチャを持つ立方体のテクスチャリングに問題があります。すべての面に1つのテクスチャで立方体を描画できますが、複数のテクスチャを使用しようとすると失敗します。私がそれをやろうとしている方法はそうです:

//my indexing array located in a header file
#define NUM_IMAGE_OBJECT_INDEX 36
static const unsigned short cubeIndices[NUM_IMAGE_OBJECT_INDEX] =
{
    0, 1, 2,   2, 3, 0,      // front
    4, 5, 6,   6, 7, 4,      // right
    8, 9,10,  10,11, 8,      // top
    12,13,14,  14,15,12,     // left
    16,17,18,  18,19,16,     // bottom
    20,21,22,  22,23,20      // back
};

現在、私のレンダリング関数では、これは現在、単一のテクスチャで立方体を描画するために機能します

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, iconTextureID);

glDrawElements(GL_TRIANGLES, NUM_IMAGE_OBJECT_INDEX, GL_UNSIGNED_SHORT, 0);

これは動作しません

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, iconTextureID);

glDrawElements(GL_TRIANGLES, NUM_IMAGE_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)&cubeIndices[0]);

他のいくつかの例を見ると、これは同じことと同じであるはずです。最終的に私はこれを次のようにしたいと思います:

for(int i = 0; i < 6; i++){

    iconTextureID = textureID[i];                
    glBindTexture(GL_TEXTURE_2D, iconTextureID);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (const GLvoid*)&cubeIndices[i*6]); //index 0-5 use texture 1, 6-11 use texture 2, etc

}

このインデックス作成で何が問題になる可能性があるかを誰かが知っていますか?iveは基本的にこのコードをAndroidプロジェクト(動作します)からコピーして貼り付け、現在iosでこれを実行しようとしています。

4

1 に答える 1

5

OpenGL ES 2.0では、インデックスデータはバッファオブジェクトまたはクライアントメモリへのポインタのいずれかから取得できます。あなたのコードは明らかにバッファオブジェクトを使用しています。glBindBuffer(GL_ELEMENT_ARRAY_BUFFER)このバッファオブジェクトの作成、ポインタのクライアント配列をアップロードする場所、またはそれを使用してレンダリングする前に呼び出す場所は示していませんが。そこにある必要があります。そうでないと、コードがクラッシュします。バッファがにバインドされている場合GL_ELEMENT_ARRAY_BUFFER、OpenGLは、glDrawElementsに指定された「ポインタ」が、クライアントメモリポインタではなく、バッファオブジェクトへのバイトオフセットであると想定します。

これが、コピーアンドペーストコーディングが悪い考えである理由です。コピー元はおそらくクライアントメモリを使用していました。あなたは違う。

ループコードを機能させたい場合は、ポインタ演算を自分で行う必要があります。

for(int i = 0; i < 6; i++)
{
    iconTextureID = textureID[i];                
    glBindTexture(GL_TEXTURE_2D, iconTextureID);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, reinterpret_cast<void*>(i * 6 * sizeof(GLushort)));
}
于 2012-11-22T16:18:48.767 に答える