【问题标题】:Rotate a object in OpenGL在 OpenGL 中旋转对象
【发布时间】:2013-05-05 20:18:48
【问题描述】:

我想在 OpenGL 中移动一个对象。我在 (0,0,0) 中绘制对象,如果对象在该点上,它会很好地旋转(使用对象的中心作为旋转的参考)。当我移动对象时,问题就出现了,它使用与参考相同的点而不是它所在的点旋转。代码是:

glPushMatrix();
glRotatef(xangle,1.0f,0.0f,0.0f);
    glRotatef(yangle,0.0f,1.0f,0.0f);
    glRotatef(zangle,0.0f,0.0f,1.0f);
    glTranslatef(x,y,z);
//draw object
    glPopMatrix();

有谁知道它必须做什么才能使对象始终使用它所在的点作为参考进行旋转?

【问题讨论】:

标签: opengl rotation glrotate


【解决方案1】:

只需重新排序您的转换:

glPushMatrix();
glTranslatef(x,y,z);
glRotatef(xangle,1.0f,0.0f,0.0f);
glRotatef(yangle,0.0f,1.0f,0.0f);
glRotatef(zangle,0.0f,0.0f,1.0f);
//draw object
glPopMatrix();

【讨论】:

  • 如果我这样做,对象旋转得很好,但问题是平移(它有一个前后部分),因为当它应该使用正面或背面移动时,它可以平移移动侧面。
  • 我不明白。什么正面和背面?哪一边在不应该移动的时候移动?
  • 对象有一个前部和一个后部,我使用翻译用键盘前后移动它。如果平移在旋转之前并且我旋转对象,则对象不会在前/后部分的方向上移动。
  • 那么您不应该将旋转和平移彼此分开存储,而是存储为一个矩阵。然后,您可以根据需要应用旋转和平移。您看到这种行为的原因是平移向量也必须旋转。
猜你喜欢
  • 2016-07-22
  • 2017-08-24
  • 2012-02-16
  • 1970-01-01
  • 2019-08-17
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多