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

时间:2011-05-27 02:59:02

标签: opengl

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

enter image description here 换句话说,旋转就好像星星是一张纸平放在桌子上,中间有一个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();

洞察力表示赞赏。谢谢你的期待。

1 个答案:

答案 0 :(得分:5)

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

  1. Theta - 旋转度数
  2. 协调执行轮换
  3. 正常 - 旋转的法线向量 - 在这种情况下(0.0f,0.0f,1.0f) - 当你看到星星时,一个向量从你脸上的屏幕出来。
  4. Theta你已经失败了 - 你会想要制作一个计时器或把它放在事件线程/回调中,这样它就可以更新以继续旋转它 - 否则你旋转一下它就会永远保持这种状态

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

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

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

    gl11.glRotatef(theta,0.0f,0.0f,1.0f);
    
    祝你好运!