我试图围绕它的中心旋转一个"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)
洞察力赞赏.谢谢你的期待.
好的,所以你在OpenGL中有四个旋转所需的值:
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)
祝好运!
| 归档时间: |
|
| 查看次数: |
3675 次 |
| 最近记录: |