2016-10-29 91 views
0

我目前正在學習OpenGL和從我的理解,我有畫線之前調用(OpenGL的)繪製直線,但形狀不

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

。然後,要繪製形狀,我需要調用

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

繪製形狀,如GL_TRIANGLES和GL_QUADS。 我寫了這段代碼,其目的是在頂部繪製一條線和3個形狀,但只繪製了一條線。 這是我的代碼。

void drawScene() { 
//Clear information from last draw 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glMatrixMode(GL_PROJECTION); //Switch to the drawing perspective 
glLoadIdentity(); //Reset the drawing perspective 



glBegin(GL_LINES); 

glColor3f(100,200,100); 
glLineWidth(10.0f); 
glVertex2f(-1.0f,0.8f); 
glVertex2f(1.0f,0.8f); 

glEnd(); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glBegin(GL_QUADS); //Begin quadrilateral coordinates 

//Trapezoid 
glVertex3f(-0.7f, -1.5f, -5.0f); 
glVertex3f(0.7f, -1.5f, -5.0f); 
glVertex3f(0.4f, -0.5f, -5.0f); 
glVertex3f(-0.4f, -0.5f, -5.0f); 

glEnd(); //End quadrilateral coordinates 


glBegin(GL_TRIANGLES); //Begin triangle coordinates 

//Pentagon 
glVertex3f(0.5f, 0.5f, -5.0f); 
glVertex3f(1.5f, 0.5f, -5.0f); 
glVertex3f(0.5f, 1.0f, -5.0f); 

glVertex3f(0.5f, 1.0f, -5.0f); 
glVertex3f(1.5f, 0.5f, -5.0f); 
glVertex3f(1.5f, 1.0f, -5.0f); 

glVertex3f(0.5f, 1.0f, -5.0f); 
glVertex3f(1.5f, 1.0f, -5.0f); 
glVertex3f(1.0f, 1.5f, -5.0f); 

//Triangle 
glVertex3f(-0.5f, 0.5f, -5.0f); 
glVertex3f(-1.0f, 1.5f, -5.0f); 
glVertex3f(-1.5f, 0.5f, -5.0f); 

glEnd(); //End triangle coordinates 

glutSwapBuffers(); //Send the 3D scene to the screen 
} 

可能有人請向我解釋如何GL_PROJECTION和GL_MODELVIEW以及它們如何工作之間切換?

+1

您使用了棄用的固定功能API。我強烈建議你轉向OpenGL 4.5,這將解決問題。 – ybungalobill

+2

爲了加速學習,您應該瞭解有關窗口及其座標,OpenGL視口,NDC和剪輯空間的更多信息。你不會通過編碼正確學習OpenGL,並看看會發生什麼。祝你好運。 – Andreas

回答

2

您的多邊形的Z值爲-5.0,它在設備座標的默認[-1,1]範圍之外,因此它們會被丟棄。

將所有glVertex3f(x, y, z)調用替換爲glVertex2f(x,y)

+0

「剔除」在這裏是一個不幸的術語。在OpenGL術語中,剔除是指根據它們的排列順序來消除多邊形。在這種情況下會發生什麼叫做「裁剪」。 –

+0

@ReetoKoradi:你錯了。閱讀OpenGL 4.5規範部分'13 .5原始剪輯':「原始圖像被剔除,然後剪切到剪輯卷」 – ybungalobill

+0

好吧,從技術上講,OpenGL規範在這種情況下使用動詞「丟棄」(因爲剔除卷涉及到這裏)。但是,通常「剔除」是指丟棄整個基元,而「剪切」是指用較小的基元代替基元。所以在這兩者中,更多的是「剔除」而不是「裁剪」。不過我會將其與OpenGL術語對齊。 – ybungalobill