Opengl,渲染对象姿势

时间:2014-08-24 09:52:53

标签: opengl matrix rotation

我想以滚动俯仰偏航方式旋转3d对象。 我将对象的姿势存储在矩阵中,并执行滚动,俯仰和偏转旋转,将姿势矩阵乘以关于x,y或z轴的标准旋转矩阵之一。

然后我使用这些代码行显示它。

void display()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();
  gluLookAt(-5, 5, 2, 0, 0, 0, 0, 1, 0);
  glPushMatrix();
    ship.Draw();
  glPopMatrix();
  glutSwapBuffers(); 
}
void Spacecraft::Draw(){
  glMultMatrixf(pose);
  model.Draw();
  return;
}

它有效,但是对象,而不是围绕它们自己的轴旋转它围绕世界轴旋转...... 我哪里错了?

1 个答案:

答案 0 :(得分:0)

旋转始终与局部坐标系的原点有关。因此,您首先必须转换坐标系,以便所需旋转的中心恰好位于本地坐标系原点。在没有看到其余代码的情况下,很难分辨应用的位置和转换。

其余的绘图代码(未显示)也包含模型的内容。绘制功能。很可能你在那里的某个地方有翻译。此平移将对象移离坐标系中心。我认为你所缺少的(不是关于OpenGL而是一般的线性代数)是,矩阵乘法是非交换的,即操作顺序很重要,而对于列主矩阵,操作的顺序是最后一个(或者从右到左,如果用正常表示法写的)。所以旋转必须是你在矩阵上乘以的最后事物,而不是第一个。