如何缩放和旋转opengl中的纹理?

问题描述:

我为我的iphone游戏使用了opengl ES。要缩放和旋转我的对象,我这样做: glScalef(scaleX,scaleY,1); glRotatef(rotationZ,0.0f,0.0f,1.0f)如何缩放和旋转opengl中的纹理?

我使用orthof(-1,1,-1,1,-1,1)的正视屏幕。我的问题是当我旋转物体,图像偏斜。我明白为什么会发生这种情况,因为我正在缩放屏幕大小,因此在旋转屏幕时会改变图像大小。 我能做些什么来防止它歪斜。

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); 

使用与屏幕纵横比相匹配的正投影,而不是只发送一堆。除非你有一个方形的屏幕,否则你的左/右不应该与你的顶部/底部相同,否则你会看到歪斜。

+0

我试着给出正交投影的左右两侧作为-aspectR和aspectR,但我仍然看到偏斜。我想通过防止偏斜的唯一方法是将矩形图像视为正方形,然后将其缩放为正方形。 – user2238284 2013-04-08 18:38:31

+0

如果您画一个正方形并且看不到一个正方形,或者如果您绘制一个矩形并且看不到一个矩形,那么您通过不首先设置合适的投影矩阵而使您的生活变得更加困难。您不希望使用模型视图矩阵来弥补配置不良的投影矩阵。 – johnbakers 2013-04-08 23:41:47

+0

另外,请确保您正确设置了您的视口,因为这也可能导致对象无法以正确的形状出现 – johnbakers 2013-04-09 01:02:01