代码之家  ›  专栏  ›  技术社区  ›  Cruachan

在OpenGL中设置表面纹理的动画

  •  2
  • Cruachan  · 技术社区  · 16 年前

    我正在使用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 回复  |  直到 14 年前
        1
  •  8
  •   Jesse Beder    16 年前

    你的纹理偏移量增加了 1.0f ;但在该范围内考虑纹理坐标 [0, 1] ,所以实际上不会更改纹理坐标(假设您启用了某种包装)。

    尝试更改增量(尝试 .01f 或者根据帧速率来确定是否有效。如果没有,那么它可能与启用的纹理参数有关。