Opengl es 如何在opengl es中缩放和旋转纹理?

Opengl es 如何在opengl es中缩放和旋转纹理?,opengl-es,Opengl Es,我在iphone游戏中使用opengl ES。要缩放和旋转对象,请执行以下操作: glScalef(scaleX,scaleY,1); glRotatef(旋转Z,0.0f,0.0f,1.0f) 我正在使用一个带有orthof(-1,1,-1,1,-1,1)的ortho屏幕。我的问题是当我旋转对象时,图像会倾斜。我理解为什么会发生这种情况,因为我正在将wrt缩放到屏幕大小,所以在旋转时它会改变图像大小。 我能做些什么来防止它变歪 glViewport(0,0, (GLint)screenWidt

我在iphone游戏中使用opengl ES。要缩放和旋转对象,请执行以下操作: glScalef(scaleX,scaleY,1); glRotatef(旋转Z,0.0f,0.0f,1.0f)

我正在使用一个带有orthof(-1,1,-1,1,-1,1)的ortho屏幕。我的问题是当我旋转对象时,图像会倾斜。我理解为什么会发生这种情况,因为我正在将wrt缩放到屏幕大小,所以在旋转时它会改变图像大小。 我能做些什么来防止它变歪

glViewport(0,0, (GLint)screenWidth, (GLint)screenHeight);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrthof(-1,1,-1,1,-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glPushMatrix();

glTranslatef(positionX, positionY,0.0f);

glScalef(scaleX , scaleY ,1);

glRotatef(rotationZ, 0.0f, 0.0f, 1.0f);

使用与屏幕纵横比相匹配的正交投影,而不是只发送一组。除非你有一个正方形的屏幕,你的左/右不应该和你的上/下一样,否则你会看到倾斜

我试着将正交投影的左右两边分别表示为-aspectR和aspectR,但我仍然看到了偏斜。我发现防止偏斜的唯一方法是将矩形图像视为正方形,然后将其缩放为正方形。如果你画了一个正方形却看不到正方形,或者如果你画了一个矩形却看不到矩形,那么如果你不先设置一个适当的投影矩阵,你的生活就会变得更加困难。您不希望必须使用modelview矩阵来补偿配置不当的投影矩阵。此外,请确保正确设置视口,因为这也可能导致对象的形状不正确。我添加了我设置视口和投影矩阵的方法。除非您的屏幕是一个完美的正方形,把所有的1传递给你的正交会给你倾斜。您应该将屏幕的相同纵横比传递给ortho。