【问题标题】:Understanding gluLookAt了解 gluLookAt
【发布时间】:2014-12-05 10:12:37
【问题描述】:

我在原点绘制轴并将它们固定在适当的位置,我正在尝试使用 glLookAt 旋转我的相机:

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
DrawAxes();     // Draws X-axis in red, Y in green, Z in blue
glRotated( m_dRotX, 1.0, 0.0, 0.0 );
glRotated( m_dRotY, 0.0, 1.0, 0.0 );
glRotated( m_dRotZ, 0.0, 0.0, 1.0 );
gluLookAt( m_dCameraPos_X, m_dCameraPos_Y, m_dCameraPos_Z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 );
SwapBuffers( m_pDC->m_hDC );

从一个位置( 0, 0, 100 )开始,我围绕 Y 轴旋转,我希望看到红条(X 轴)变短,蓝条(Z 轴)变长,但是什么都没有动。 我错过了什么?

【问题讨论】:

  • 在进行任何旋转之前先绘制

标签: opengl glulookat


【解决方案1】:

您的问题是由代码中给出的操作顺序引起的:您重置矩阵堆栈,绘制所有内容,然后设置相机参数。但是这些会在下一次 drawcall 之前被 glLoadIdentity 重置。

您的代码的更正版本如下所示

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode( GL_MODELVIEW );

//Reset stack
glLoadIdentity();

//Set viewmatrix from camera
glRotated( m_dRotX, 1.0, 0.0, 0.0 );
glRotated( m_dRotY, 0.0, 1.0, 0.0 );
glRotated( m_dRotZ, 0.0, 0.0, 1.0 );
gluLookAt( m_dCameraPos_X, m_dCameraPos_Y, m_dCameraPos_Z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 );

//Draw using the viewmatrix
DrawAxes();     // Draws X-axis in red, Y in green, Z in blue

SwapBuffers( m_pDC->m_hDC );

【讨论】:

  • 好吧,我可能错了,但是……你不是这样旋转轴的吗?我应该如何只旋转相机?
  • 基本上是一样的。将相机向右旋转与将对象向左旋转相同。此外,OpenGL 中没有像相机这样的概念。我在答案here中解释了更多关于OpenGL的坐标系。
  • 好吧,我说“相机”来表示 gluLookAt 的眼睛参数。有没有办法保持轴(和其他绘图)固定并只移动“眼睛”/gluLookAt?
  • 没有办法。如前所述,相机变换必须应用于您绘制的内容。
  • 哎呀。谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多