2016-07-06 159 views
1

我正在調試代碼,我想查看深度圖像的掃描,但是我的相機設置不讓我看到掃描。因此,我正在玩相機設置。我在(30,120,800)處創建了一個巨大的點,我可以使用gluLookAt來查看它。 glFrustum的相關設置是什麼(左,右,下,上,近,遠)?使用我的設置,點應該完全位於中心,但我看不到它。glFrustum()與gluLookAt相比的解釋

void onDisplay() 
{ 
glEnable(GL_NORMALIZE); 
glEnable(GL_DEPTH_TEST); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glDisable(GL_CULL_FACE); 
glPushMatrix(); 
glPointSize(1111111116.0); 
glColor3f(0.25f, 0.907, 0.731f); 
glLoadIdentity(); 
// Set the camera 
//gluLookAt( 30.f, 120.0f, 800.f, 30.f, 120.0f, 800.f, 0.0f, 1.f, 0.0f); //works 
glFrustum(28, 32,  118,  122, 798,  802); 
glBegin(GL_POINTS); 


glVertex3f(30, 120, 800); //30,120,800 

glEnd(); 

glPopMatrix(); 
//glFinish(); 
//glutSwapBuffers(); 
glutSwapBuffers(); 
glutPostRedisplay(); 
} 

int main(int argc, char **argv) 
{ 
// initialize GLUT 
glutInitWindowSize(800, 800); 

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 

glutInit(&argc, argv); 

glutCreateWindow("HeadPoseDemo"); 


glutKeyboardFunc (processSpecialKeys); 

glutDisplayFunc(onDisplay); 
glutMainLoop(); 
return 0; 
} 
+3

要使用相機類比'glFrustum'來描述相機上的鏡頭(廣角,遠距,景深),但不會說相機指向的位置。 'gluLookAt'爲你指點相機。 –

+1

從opengl教程:默認情況下,相機位於原點,指向負Z軸,並具有(0,1,0)的向上向量。所以在http://www.glprogramming.com/red/chapter03.html。隨着gluLookAt你移動相機到一個點,你設置它的方向,你設置向上指向的地方。該frustrum定義您的相機可以看到延伸。 「它的位置有多遠和多遠」 –

+0

謝謝@理查德,你能否給我一個解釋,爲什麼我用gluLookAt(30.f,120.0f,800.f,30.f, 120.0f,800.f,0.0f,1.f,0.0f);'但不與'gluLookAt(0.f,0.0f,0.f,30.f,120.0f,800.f,0.0f, 1.f,0.0f);'。我的問題是我想看到一個點雲,需要從更遠的地方看它 – TobSta

回答

2

魔鬼在細節:注意如何在文檔中,他們說

nearVal,farVal

指定距離遠近深度裁剪平面。兩個距離都必須是正值。

這是從他們使用其他參數的寫法不同:

左,右

指定座標左右垂直裁剪平面。

你應該知道的是,你正在沿負Z軸看。所以我的猜測是,當你將其更改爲glVertex3f(30.f, 120.f, -800.f);時,你會看到你的觀點。