2014-10-16 40 views
0

我正在嘗試使用LWJGL旋轉像素大小爲666 x 333的矩形Slick2d圖像。我能夠圍繞其中心旋轉一個像素尺寸爲666 x 666的方形圖像,但矩形圖像在旋轉過程中會扭曲,這是我的問題。使用LWJGL旋轉矩形Slick2d圖像導致失真

這裏是我用於測試目的的圖像: http://i.stack.imgur.com/0bjr5.jpg

左邊窗口顯示了旋轉之前的圖像,右邊的窗口中顯示圖像如何看起來,當我旋轉90度,它扭曲了: http://i.stack.imgur.com/FGcNB.jpg

這裏是轉動我的源代碼片段:

float x = 0.335f; 
float y = 0.335f; 
glMatrixMode(GL_TEXTURE); 
glLoadIdentity(); 
glTranslatef(x, y, 0f); 
glRotatef(angle, 0f, 0f, 1f); 
glTranslatef(-x, -y, 0f); 
glMatrixMode(GL_MODELVIEW); 

你也許會奇怪,爲什麼我不使用的功能「setRo一個Slick2d圖像「或」旋轉「。我不使用這個的原因在這裏並不重要,但我不能在我的真實項目中使用它,而且我想用gl來做。

這是我第一次觸碰LWJGL和Slick2d,我只需要它用於我的項目的一小部分。如果你知道如何像上面一樣旋轉圖像而不失真,請幫助我。謝謝。

回答

0

問題可能是因爲:

您正在使用Slick-2D。 glRotatefglTranslatef需要Z座標。這可能會混淆光滑的2D。你的角度變量是什麼? glTranslatef轉換四方的位置。使用lwjgl 3D將用於翻譯對象。 glRotatef使用向量旋轉。嘗試研究矢量旋轉。

下面是一個簡單的僞代碼的公式:

計算的角度的正弦和餘弦一次。 Dim cosTheta As Double,sinTheta As Single cosTheta = Cos(DegreesToRadians(Angle))sinTheta = Sin(DegreesToRadians(Angle))'獲得中心和點之間的差異。 Dim dblDistanceX As Double,dblDistanceY As Double dblDistanceX =(PointX - CenterX)dblDistanceY =(PointY - CenterY)'設置默認位置。 ReturnX = CenterX ReturnY = CenterY'用Y偏移更新ReturnX =(ReturnX + dblDistanceY * sinTheta)ReturnY =(ReturnY + dblDistanceY * cosTheta)'用X偏移更新ReturnX =(ReturnX + dblDistanceX * cosTheta)ReturnY = dblDistanceX * sinTheta)

90度旋轉極其簡單。只需旋轉四邊形和重新綁定紋理即可。如果你不能做到這一點,然後做一個90度旋轉的紋理。只要問你是否想要我的90度旋轉代碼的另一個答案。我試圖解釋如何使用矢量360度旋轉。