2017-05-12 40 views
0

這有沒有glViewport和正確借鑑:到glViewport簡單的調用導致黑屏

glClearColor(0, 0, 0, 0); 
glClear(GL_COLOR_BUFFER_BIT); 

glColor3f(1.0f, 0,0); 
glBegin(GL_TRIANGLES); 
{ 
    glVertex3f( 0.0, 1, 0.0); 
    glVertex3f(-0.2, -0.3, 0.0); 
    glVertex3f( 0.2, -0.3 ,0.0); 

} 

頂點的座標內-1和1所有,所以我加了它應該包含他們視:

glViewport(-1,-1,2.0,2.0); 

glClearColor(0, 0, 0, 0); 
glClear(GL_COLOR_BUFFER_BIT); 

glColor3f(1.0f, 0,0); 
glBegin(GL_TRIANGLES); 
{ 
    glVertex3f( 0.0, 1, 0.0); 
    glVertex3f(-0.2, -0.3, 0.0); 
    glVertex3f( 0.2, -0.3 ,0.0); 

} 

只要我這樣做,屏幕是空白的。如果沒有視口,在視覺上,屏幕顯示爲以單位繪製,屏幕寬度和高度爲2,如演示三角形所示。我也可以在-1,-1處放置東西,它位於左下角,這就是爲什麼我的glViewport也被設置爲左下角座標。它不在視口之後顯示任何內容的明顯原因是什麼?

回答

3

似乎你錯過了什麼glViewport確實:它定義了像素座標可見的NDC範圍([-1,1])應映射。如果使用[-1,-1,2,2],則整個圖像從窗口中的像素-1到像素1繪製。

如果要指定世界座標系的哪個區域映射到可見NDC範圍,則應使用適當的投影矩陣。

+1

我覺得'glOrtho'或'glTranslatef'和'glScalef'值得一提。 – lisyarus

+0

謝謝,因爲它會導致我的錯誤是由於我現有的在OSX上使用GLKit的正投影的問題。我提出了一個新問題。 – johnbakers

+3

@lisyarus這些函數中的所有3個都被棄用,並且在覈心OpenGL中不可用。你最好使用像GLM這樣的庫。 –