我尝试使用LWJGL旋转像素大小为666 x 333的矩形Slick2d图像。我能够围绕其中心旋转像素大小为666 x 666的方形图像,但矩形图像在旋转期间会扭曲,这是我的问题。
这是我用于测试目的的图像: 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);
您可能想知道为什么我不使用Slick2d图像的“setRotation”或“rotate”功能。我没有使用它的原因在这里并不重要,但我只是无法在我的真实项目中使用它,而且我想用gl来做。
这是我第一次触摸LWJGL和Slick2d,我只需要我项目的一小部分。如果您知道如何在没有失真的情况下旋转图像,请帮助我。谢谢。
答案 0 :(得分:0)
问题可能是因为:
您使用的是Slick-2D。 glRotatef
和glTranslatef
需要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 =(ReturnY - dblDistanceX * sinTheta)
90度旋转非常简单。只需旋转四边形并重新绑定纹理即可。如果你不能这样做,那么做一个90度旋转的纹理。只要问一下我的90度旋转代码是否需要另一个答案。我试图解释如何使用矢量进行360度旋转。