Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 分别旋转同一对象的2个纹理坐标集_Iphone_Objective C_Opengl Es - Fatal编程技术网

Iphone 分别旋转同一对象的2个纹理坐标集

Iphone 分别旋转同一对象的2个纹理坐标集,iphone,objective-c,opengl-es,Iphone,Objective C,Opengl Es,我已经尝试了一段时间,但一直没有得到好的结果。基本上,我有一个有两个纹理的球体。其中一个在顶部与另一个混合,其想法是将其作为面部环境贴图。我希望一个纹理与球体一起旋转,另一个保持固定到初始纹理坐标 我曾尝试旋转一个纹理的GL_纹理矩阵并重置另一个纹理,但这并没有真正起作用,因为纹理贴图在以特定方式旋转时不正确 有人知道我如何只旋转一组纹理坐标,而保持另一组不变吗 下面是我目前的渲染代码: glColor4f(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER

我已经尝试了一段时间,但一直没有得到好的结果。基本上,我有一个有两个纹理的球体。其中一个在顶部与另一个混合,其想法是将其作为面部环境贴图。我希望一个纹理与球体一起旋转,另一个保持固定到初始纹理坐标

我曾尝试旋转一个纹理的GL_纹理矩阵并重置另一个纹理,但这并没有真正起作用,因为纹理贴图在以特定方式旋转时不正确

有人知道我如何只旋转一组纹理坐标,而保持另一组不变吗

下面是我目前的渲染代码:

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;

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

您可以使用两个球体,并且只向球体发出glRotatef(),使其具有要旋转的纹理。另一个球体将只接收相应的glTranslatef()命令。如果使用alpha通道来混合纹理,其效果应该是一样的。

我对此很担心,但我担心这会影响整体性能。还有许多其他的碰撞检测和物理数学正在进行,这已经增加了很多开销。你知道我会以不同的方式受到多大的性能影响吗?我以前做过,但我只有一个模型包含在物理中,克隆只是遵循线性变化,而不是旋转变化,所以它没有包含在物理中。这只是模型绘制的一个附加步骤,您可能会使用不同的纹理跟踪模型。这是可行的,尽管我不确定这看起来是否符合我的要求。通过组合纹理,我可以设置要添加的环境,使其更好地混合。我会继续尝试,如果我能想出一个替代的方法,我会发布它。