单独旋转同一对象的2个纹理坐标集

时间:2010-11-24 20:02:50

标签: iphone objective-c opengl-es

我已经暂时给了这个,但我没有得到有利的结果。基本上,我有一个有2个纹理的球体。一个与其他人混合在一起,其想法是让它成为一个面部环境映射。我希望一个纹理与球体一起旋转,另一个纹理保持固定在初始纹理坐标上。

我已经尝试旋转一个纹理的GL_TEXTURE矩阵并重置另一个纹理,但这并不是真的有效,因为当它以某种方式旋转时纹理映射不正确。

任何人都知道如何只旋转一组纹理坐标并保持另一组固定?

此处是我的渲染代码:

glColor4f(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

glClientActiveTexture( GL_TEXTURE0);
glActiveTexture( GL_TEXTURE0);
glBindTexture( GL_TEXTURE_2D, tex[0]);
glEnableClientState( GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].texCoord);

glMatrixMode(GL_TEXTURE);
glPushMatrix();
glTranslatef(0, 0, -4.5f);
glRotatef(.00001, .00001, .0, .0);

glClientActiveTexture( GL_TEXTURE1);
glActiveTexture( GL_TEXTURE1);
glEnable( GL_TEXTURE_2D);
glBindTexture( GL_TEXTURE_2D, tex[1]);
glEnableClientState( GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].texCoord);

glPopMatrix();

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(0, 0, -4.5f);

glVertexPointer(3, GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].vertex);
glNormalPointer(GL_FLOAT, sizeof(TexturedVertexData3D), &SphereVertexData[0].normal);
glDrawArrays(GL_TRIANGLES, 0, kSphereNumberOfVertices);

glPopMatrix();

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);

rotation += .0001;

如果有人需要了解更多正在发生的事情,请告诉我。

1 个答案:

答案 0 :(得分:1)

你可以使用两个球体,只用你想要旋转的纹理向球体发出glRotatef()。另一个球体将只接收相应的glTranslatef()命令。如果您使用Alpha通道混合纹理,它应该是相同的。

相关问题