我试图围绕它的中心旋转一个“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();
洞察力表示赞赏。谢谢你的期待。
答案 0 :(得分:5)
好的,所以你在OpenGL中有四个旋转所需的值:
Theta你已经失败了 - 你会想要制作一个计时器或把它放在事件线程/回调中,这样它就可以更新以继续旋转它 - 否则你旋转一下它就会永远保持这种状态
所以你需要将(使用glTranslatef)转换为恒星中心的x和y坐标 - 这将围绕自己的中心旋转恒星 - 而不是围绕另一个点旋转它(例如,转换为在恒星附近的另一个物体的中心,恒星将围绕该物体旋转而不是)。除非星星发生变化,否则不需要更改这些值。
法线向量是旋转的三维部分 - 因为我们是三维的,我们必须指出我们想要它旋转的位置...所以如果我们选择了(1.0f,0.0f,0.0f)而不是我之前提到过的那个,这颗恒星似乎会缩小,消失,然后又回来 - 它围绕着屏幕上的一个轴旋转,但由于恒星是2d,当它旋转时,你开始看到平坦的一面,就像看着一张纸边缘朝向你一样,如果纸张足够薄,你甚至看不到它。只要您不想更改其旋转的轴,就不需要更改此值。话虽如此,它是
所以,你拥有的代码非常棒 - 只需对glRotatef进行以下操作:
gl11.glRotatef(theta,0.0f,0.0f,1.0f);
祝你好运!