2016-09-28 52 views
0

我想學習,但我真的不明白。 使用:glFrustum,GL_MODELVIEW與GL_PROJECTION

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glColor3f(1.0, 1.0, 1.0); 
glBegin(GL_QUADS); 
glVertex3f(-0.5, -0.5, 0.5); 
glVertex3f(0.5, -0.5, 0.5); 
glVertex3f(0.5, 0.5, 0.5); 
glVertex3f(-0.5, 0.5, 0.5); 
glEnd(); 

這是我在繪圖程序中唯一做的事情。我正在畫一張臉,這一切都OK。

現在我想看到離觀察者越來越近的同一張臉,所以我改變了Z座標。問題在於,屏幕上出現的臉部大小不會改變。

我試過用glFrustum(-15, 15, -15, 15, 0.1, 15)設置一個平截頭體,但是然後一切都消失了(臉不在平截頭體視圖中?)。 我只想繪製一張臉,設置一個平截頭體,並沿着Z座標移動臉部,隨着臉部變得越來越大或變小。我知道有GL_MODELVIEWGL_PROJECTION,但我不明白他們是什麼,也許這是麻煩。

回答

0

在OpenGL中,按照慣例,相機朝着Z軸的負方向看,即Z軸指向之外的。您的四邊形位於Z = 0.5,位於相機後面。所以,至少看到的東西,你必須四移到負座標:

glBegin(GL_QUADS); 
glVertex3f(-0.5, -0.5, -0.5); 
glVertex3f(0.5, -0.5, -0.5); 
glVertex3f(0.5, 0.5, -0.5); 
glVertex3f(-0.5, 0.5, -0.5); 
glEnd(); 

另外,您可以旋轉的攝像頭:

glMatrixMode(GL_PROJECTION); 
glFrustum(-15, 15, -15, 15, 0.1, 15); 
glMatrixMode(GL_MODELVIEW); 
static const GLfloat m[] = { -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 }; 
glLoadMatrixf(m); 

話雖這麼說,你最好拋棄傳統的OpenGL固定管道功能,並教你自己的可編程管道。

相關問題