0
我考虑了一展身手了一段时间,但我一直没能得到良好的结果。基本上,我有一个2个纹理的球体。一个是与其他人混合在一起的,并且想法是让它成为一个脸部环境映射。我想让一个纹理与球体一起旋转,另一个纹理保持固定在最初的纹理坐标上。另外旋转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;
如果有人需要看到更多的是怎么回事,只是让我知道的。
我虽然这件事,但我担心它会影响到整体性能。还有一堆其他的碰撞检测和物理数学,已经增加了很多开销。任何想法,我会采取多少表现打击,而不是一种不同的方式? – ezekielDFM 2010-12-20 17:04:35