雪碧旋转

我使用OpenGL和人们建议使用glRotate进行精灵旋转,但我觉得很奇怪。 我的问题是,它旋转整个matrix,这种螺丝把我所有的碰撞检测,等等。 想象一下,我在位置(100,100)有一个精灵,位置(100,200)是一个障碍,精灵面对它。 我将精灵从障碍物上旋转开来,当向上移动我的y轴时,即使投影显示出它正在离开障碍物,精灵也会与它相交。 所以我没有看到另一种旋转精灵的方式,除了对图像本身进行math运算之外,并没有搞乱所有的碰撞检测。 我是对的还是我错过了什么?

这听起来像你只是让你的matrix操作的顺序错了。 假设你有一个圆形的碰撞体积,你只需要确保你的精灵在它的中心轴上旋转。 要做到这一点,你必须首先让你的精灵集中在屏幕上,把它翻译成中心或者画中心。 然后在将其翻译到当前位置之前将其旋转。

唯一的窍门是在opengl中按照列主要的顺序进行操作,这意味着你在代码中以相反的顺序应用它们。

所以这将是:

glPushMatrix(); glTranslatef(...); // lastly translating glRotatef(...); // second you would rotate glScalef(...); // if you had a scaling you would apply that first // sprite drawn about centre glPopMatrix(); 

这只是一个快速的刺,如果你使用每像素碰撞,那么这是一个其他的问题。