2014-10-16 87 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度旋转。