2013-04-06 73 views
1

我爲我的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

使用與屏幕縱橫比相匹配的正投影,而不是隻發送一堆。除非你有一個方形的屏幕,否則你的左/右不應該與你的頂部/底部相同,否則你會看到歪斜。

+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