2014-12-05 1 views
0

Я рисую оси в начале координат и держать их фиксируется в положении, я пытаюсь повернуть мою камеру с glLookAt:Понимание gluLookAt

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

вы рисуете, прежде чем делать какие-либо вращения –

ответ

3

Ваша проблема вызвана порядком, в котором указаны ваши операции в коде: Вы сбросите матричный стек, нарисуете все и задаете параметры камеры. Но они возвращаются с помощью glLoadIdentity перед следующим drawcall.

Исправленная версия кода будет выглядеть следующим образом

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); 
+0

Ну, я мог бы быть неправильно, но ... Вы не поворачивая оси в этих пути? Как мне вращать только камеру? – IssamTP

+0

В принципе, это то же самое. Вращение камеры вправо - это то же самое, что вращение объекта влево. Кроме того, в OpenGL нет концепции, как камера. Я объяснил в ответе [здесь] (http://stackoverflow.com/questions/26754725/gluproject-converting-3d-coordinates-to-2d-coordinates-does-not-convert-the-2d-y/26756095#26756095) немного больше о системах координат OpenGL. – BDL

+0

Ну, я говорю «камера», чтобы сказать параметры глаз gluLookAt. Нет ли способа удержать оси (и другие ничьи) фиксированными и перемещать только «глаза»/gluLookAt? – IssamTP

 Смежные вопросы

  • Нет связанных вопросов^_^