我正在关注这个线程的答案:Binding Multiple Textures to One Mesh in OpenGL ES 1.1
我的实现似乎没有工作,我不知道为什么。
以下是我的代码的事实:
- textureArray 是一个由 GLKTextureInfo 对象填充的 NSMutableArray
- groupMesh 是一个结构体数组,包含:
- 指向索引数组中我们要从中获取索引的位置的指针。
- 索引数据的大小
-
- 我有一个用于顶点的元素数组缓冲区和一个用于索引的元素数组缓冲区
我决定做一个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);
}
数组中的第一个纹理是树皮纹理,第二个纹理是树叶。
然而,纹理在第一次迭代后没有绑定。这给出了这种结果:
http://img69.imageshack.us/img69/5138/tbko.png
我强制循环测试我的理论是否正确并将objectAtIndex:i更改为objectAtIndex:1,叶子纹理出现了:
http://img266.imageshack.us/img266/5598/c05n.png
所以它似乎只是 glBindTexture 不起作用,是不是因为 opengl 已经处于绘制状态?有没有解决的办法?
注意:(我昨天问了一个类似的问题,但现在我做了更多的研究,但我仍然不知道我做错了什么)。