我試圖顯示特定體積的空間,從10,10,10到30,30,30的立方體。一切從我讀,我會做到這一點,像這樣:如何設置在opengl中顯示的體積
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(10, 30, 10, 30, 10, 30);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(30.0f, 30.0f, 30.0f,
20.0f, 20.0f, 20.0f,
0.0f, 1.0f, 0.0f);
glColor3f(0.0, 0.0, 0.0); //color = black
glPushMatrix();
glTranslated(20,20,20);
glutSolidSphere(.3, 50, 50);
glPopMatrix();
glOrtho
套了一下音量,我可以看到,和gluLookAt
說,相機是30,30,30,並指出在20,20, 20。但這不起作用。隨着一些幫助和一些玩耍,我設法得到這個工作,與此代碼:
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(10, 30, 10, 30, -1000, 1000); //CHANGED THESE BOUNDS
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(20,20,20); //ADDED THIS LINE
gluLookAt(30.0f, 30.0f, 30.0f,
20.0f, 20.0f, 20.0f,
0.0f, 1.0f, 0.0f);
glPushMatrix();
glTranslated(20,20,20);
glutSolidSphere(.3, 50, 50);
glPopMatrix();
爲什麼我需要這些更改?爲什麼代碼的第一個版本不起作用?
好的,在'glOrtho()'之後,[10,30]^3映射到[-1,1]^3之後,相機位於0,0,0,對吧?沒有'gluLookAt()'我可以看到2d中的東西,其中x軸是水平的而y是垂直的。我想從一個角度看事物,所以我可以沿着所有3個軸看到,但是如果我試圖將相機放在角落並看着中心,它仍然不起作用:'gluLookAt(1,1,1 ,0,0,0,0,1,0);'我想我仍然誤解了這種情況... – drowdemon
@drowdemon:是的,你確實是這樣。您現在似乎混淆了之前投影后的觀看音量。視圖變換通常在投影之前應用。我更新了我的答案。 – derhass