我正在開發一個簡單的OpenGL項目。 我想要一個簡單的相機在透視模式下移動。需要幫助在OpenGL中移動攝像頭
我不斷閱讀投影矩陣,gluLookAt和模型視圖矩陣。我一直在閱讀,我應該做的就是我的觀點調用投影矩陣,然後調用模型視圖矩陣中的所有轉換和相機移動。
#include "GLheaders.h"
void drawWorldAxis() {
glLoadIdentity();
glBegin(GL_LINES);
glNormal3f(0, 0, 1);
glColor3ub(255, 0, 0);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glColor3ub(0, 255, 0);
glVertex3f(0,0,0);
glVertex3f(0,1,0);
glColor3ub(0, 0, 255);
glVertex3f(0,0,0);
glVertex3f(0,0,1);
glEnd();
}
void keyboard(unsigned char key, int x, int y) {
glutPostRedisplay();
}
static float eye[3] = {.5, .5, .5};
#include <stdio.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(55.0, 1, .1, 10000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawWorldAxis();
printf("eye at <%f, %f, %f>\n", eye[0], eye[1], eye[2]);
fflush(stdout);
gluLookAt(eye[0], eye[1], eye[2], 0, 0, 0, 0, 1, 0);
eye[0] += .1;
eye[1] += .1;
glFlush();
glutSwapBuffers();
}
void reshape(int w, int h) {
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(55.0, 1, -1, 10000);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE| GLUT_DEPTH);
glutInitWindowSize(400,400);
glutCreateWindow("Tiny Test");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return EXIT_SUCCESS;
}
我期待這個代碼,以顯示三行代表世界座標系中的X,Y軸和Z軸,並且鍵被按下相機應該移動,並開始尋找原點/從多個座標軸系和更激烈的角度。
這裏怎麼回事?我一直在將我的頭撞到牆上,試圖找出爲什麼沒有任何動作。它只會改變,如果我把gluLookAt調用投影矩陣,我不斷告訴是一個可怕的想法。
謝謝!這導致我需要去的地方! loadIdentity也是爲了讓我沒有看到worldaxis,因爲lookAt沒有被應用到它。清理loadIdentity,重新排序的東西似乎解決了它! –