このスレッドからの回答に従っています: Binding Multiple Textures to One Mesh in OpenGL ES 1.1
私の実装は機能していないようで、その理由がわかりません。
私のコードの事実は次のとおりです。
- textureArray は、GLKTextureInfo オブジェクトによって設定された NSMutableArray です。
- groupMesh は、以下を含む構造体の配列です。
- インデックスを取得したいインデックス配列内の場所へのポインタ。
- 索引データのサイズ
-
- 頂点用に要素配列バッファを 1 つ、インデックス用に要素配列バッファを 1 つ持っています。
forループを作ることにしました。各反復で、GLKTextureInfo 配列から異なるテクスチャをバインドし、バインドしたばかりのテクスチャで描画するインデックス データのメモリ領域へのポインターを変更します。
-
for (int i = 0; i<mesh->numMeshes-1; i++)
{
glBindTexture(GL_TEXTURE_2D,
[(GLKTextureInfo *)[textureArray objectAtIndex:i] name]);
glDrawElements(GL_TRIANGLES,
mesh->groupMesh[i].indexDataSize*4,
GL_UNSIGNED_INT,
mesh->groupMesh[i].indexPointer);
}
配列の最初のテクスチャは樹皮のテクスチャで、2 番目のテクスチャは木の葉です。
ただし、最初の繰り返しの後、テクスチャは拘束されません。次のような結果が得られます。
http://img69.imageshack.us/img69/5138/tbko.png
私の理論が正しいかどうかをテストするためにループを強制し、objectAtIndex:i を objectAtIndex:1 に変更すると、葉のテクスチャが全体に現れました。
http://img266.imageshack.us/img266/5598/c05n.png
動作していないのは glBindTexture のようですが、opengl が既に描画状態にあるためですか? これを回避する方法はありますか?
注:(昨日同様の質問をしましたが、もう少し調査を行ったところ、何が間違っているのかわかりません)。