OpenGL - 围绕其中心顺时针旋转2D星形

far*_*ich 1 opengl

我试图围绕它的中心旋转一个"2D"星作为动画,如下所示:

在此输入图像描述 换句话说,旋转就好像星星是一张纸平放在桌子上,中间有一个tac,我想旋转它.这是一些代码:


gl11.glPushMatrix();
gl11.glTranslatef(xCoord, yCoord, 0);
// theta+=.08f; NEEDED?
// rotateX++;   NEEDED?
// rotateY++;   NEEDED?
// rotateZ++;   NEEDED?
gl11.glRotatef(?,?,?,?);
gl11.glRotatef(?,?,?,?);
gl11.glRotatef(?,?,?,?);            
gl11.glDrawElements(...);
gl11.glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

洞察力赞赏.谢谢你的期待.

Tra*_*vis 5

好的,所以你在OpenGL中有四个旋转所需的值:

  1. Theta - 旋转度数
  2. 协调执行轮换的内容
  3. 正常 - 旋转的法线向量 - 在这种情况下(0.0f,0.0f,1.0f) - 当你看到星星时,一个向量从你脸上的屏幕出来.

Theta你已经失败了 - 你会想要制作一个计时器或把它放在一个事件线程/回调中,这样它就可以更新以保持旋转 - 否则你旋转一下它会永远保持这种状态

所以你需要将(使用glTranslatef)转换为恒星中心的x和y坐标 - 这将围绕它自己的中心旋转恒星 - 而不是围绕另一个点旋转它(例如,转换到另一个点的中心)在恒星附近的物体,恒星将围绕该物体旋转而不是).除非星星发生变化,否则不需要更改这些值.

法向量是旋转的三维部分 - 因为我们是三维的,我们必须指出我们想要它旋转的位置...所以如果我们选择了(1.0f,0.0f,0.0f)而不是我之前提到的一个,星似乎会收缩,消失,然后回来 - 它围绕屏幕中的一个轴旋转,但由于它是2d,当它旋转时,你开始看到平坦的一面,就像看着一张纸朝你的边缘,如果纸张足够薄,你甚至看不到它.只要您不想更改其旋转的轴,就不需要更改此值.话虽这么说,是的

所以,你拥有的代码非常棒 - 只需对glRotatef进行以下操作:

gl11.glRotatef(theta,0.0f,0.0f,1.0f);
Run Code Online (Sandbox Code Playgroud)

祝好运!