了解gluLookAt

时间:2014-12-05 10:12:37

标签: opengl glulookat

我在原点绘制轴并将它们固定在适当的位置,我试图用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轴)变长但没有任何动静。 我错过了什么?

1 个答案:

答案 0 :(得分:3)

您的问题是由代码中的操作顺序引起的:您重置矩阵堆栈,绘制所有内容,然后设置相机参数。但是在下一次抽签之前,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 );