我正在使用 iPhone OpenGLES 实现,我希望在一个简单的表面(两个三角形组成一个矩形)上无休止地滚动纹理。这应该很简单,但这不是我以前做过的事情,我一定错过了一些东西。我可以很好地旋转纹理,但平移根本不起作用。我是否存在轻微的实现问题,或者我是否做了一些根本性错误的事情?
// move texture glMatrixMode(GL_TEXTURE); glPushMatrix(); glLoadIdentity(); // increment offset - no reset for demo purposes wallOffset += 1.0; // move the texture - this does not work glTranslatef(wallOffset,wallOffset,0.0); // rotate the texture - this does work //glRotatef(wallOffset, 1.0, 0.0, 0.0); glMatrixMode(GL_MODELVIEW); glBindTexture(GL_TEXTURE_2D, WallTexture.name); glTexCoordPointer(2, GL_FLOAT, 0, coordinates); // simple drawing code glNormalPointer(GL_FLOAT, 0, normals); glVertexPointer(3, GL_FLOAT, 0, vertices); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); // push matrix back glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW);
最佳答案
您将纹理偏移量增加 1.0f
;但纹理坐标被认为在 [0, 1]
范围内,因此您实际上并没有更改纹理坐标(假设您已启用某种包装)。
尝试更改该增量(尝试 .01f
,或者可能取决于帧速率的其他内容)并查看它是否有效。如果不是,则可能与您启用的纹理参数有关。
关于iphone - 在 OpenGL 中对表面上的纹理进行动画处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/904460/