我对OpenGL ES 1.1有一个严重的问题,虽然我已经查看了一千次,但我找不到解决方案,而且我在这里找不到类似问题的东西。我希望你们能帮助我。
我在71squared.com上观看了教程2(你可以找到它here)并从同一页面下载了代码示例。它运行良好。
然后我尝试编写自己的代码,以使其适应我的项目。无论如何,当谈到OpenGL调用时,我注意使用与示例相同的代码。
问题如下:虽然我的纹理没有显示,但我对glClear()的调用会影响屏幕的颜色。 UIView子类(显示glClear())或加载纹理的代码都不会导致问题,因为正确计算了相应实例的所有iVar。此外,即使纹理坐标和顶点也采用正常值,这与代码示例中的相同。所以问题必定是由我使用OpenGL做出的一些小错误造成的。
这些是我的所有OpenGL调用:
初始化:
CGRect rect = [[UIScreen mainScreen] bounds];
// Set up OpenGL projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, rect.size.width, 0, rect.size.height, -1, 1);
glMatrixMode(GL_MODELVIEW);
glViewport(0, 0, rect.size.width, rect.size.height);
// Initialize OpenGL states
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND_SRC);
glEnableClientState(GL_VERTEX_ARRAY);
绘制纹理:
(t是指向包含有关如何绘制图形的信息的结构的指针。)
glPushMatrix();
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glTranslatef(t->posX, t->posY, 0.0f);
glRotatef(-(t->rotation), 0.0f, 0.0f, 1.0f);
glColor4f(t->filter[0], t->filter[1], t->filter[2], t->filter[3]);
glBindTexture(GL_TEXTURE_2D, _texture.name);
glEnable(GL_BLEND);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, _texCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glPopMatrix();
我认为这是造成问题的地方。如果你想看到我的代码创建一个帧缓冲区,我可以向你展示。然而,它与示例中的几乎相同。
我非常绝望地找到了解决方案,因为我已经单步遍历整个代码一千次,但是我找不到代码示例所在的代码片段。
提前谢谢你。 多米尼克
答案 0 :(得分:0)
每次生成纹理图像时,都必须通过此方法检查此纹理是否有效。 如果此纹理无效,则需要在一段延迟时间内重新生成它。
GLboolean glIsTexture(GLuint texture);