2010-03-12 56 views
2

我是OpenGL的新手。我正在玩一些代碼,但我無法弄清楚爲什麼以下不會產生具有相同對象視圖的兩個視口。這裏的代碼:爲什麼我不能在多個視口中顯示相同的對象?

glViewport(0, windowHeight/2, windowWidth/2, windowHeight); 
glScissor(0, windowHeight/2, windowWidth/2, windowHeight); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(45.0, (GLfloat)(windowWidth/2)/(GLfloat)(windowHeight/2), 0.1f, 
       500.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 
drawParticleView(); 

glViewport(windowWidth/2, 0, windowWidth, windowHeight/2); 
glScissor(windowWidth/2, 0, windowWidth, windowHeight/2); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(45.0, (GLfloat)(windowWidth/2)/(GLfloat)(windowHeight/2), 0.1f, 
       500.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 
drawParticleView(); 

drawParticleView()只是繪製一個矩形數組。問題在於第二個視口是第一個視口的壓縮表示。我的窗口寬度是1280和高度960.我顯然做錯了,但是什麼?謝謝

回答

3

glViewport的參數是視口左下角的x和y,然後是寬度和高度。

對於100個像素的正方形的窗口,你的兩個視口被指定爲:

X1 = 0,Y1 = 50,寬度1 = 50,height1 = 100。

X2 = 50,Y2 = 0 ,width2 = 100,height2 = 50.

這些展示位置和尺寸將第一個視口放在窗口的左上方,將一半懸掛在窗口的頂部,第二個放置在窗口的左下方,把你的窗戶的一半懸掛在外面。

對於並排視口邊我想你想:

glViewport(0, 0, windowWidth/2, windowHeight); 
// drawing code 
glViewport(windowWidth/2, 0, windowWidth/2, windowHeight); 
// repeat drawing code 

或頂部和底部視我想你想:

glViewport(0, 0, windowWidth, windowHeight/2); 
// drawing code 
glViewport(0, windowHeight/2, windowWidth, windowHeight/2); 
// repeat drawing code 

你的第二個視口被壓扁的原因是因爲它的長寬比是倒置的,因此gluPerspective的參數是錯誤的。上面第一個選項的寬高比參數應該是(windowWidth/2)/windowHeight,上面第二個選項的windowWidth/(windowHeigh/2)應該是。

+0

太棒了!我看到我要去哪裏錯了。但是,我認爲我想要達到的,我沒有說清楚,高寬比是正確的。我試圖在兩個對角視口中顯示視圖,因此我總共需要4個視口的空間。因此,我認爲我的原始高寬比是正確的(儘管無意義地除以2)。謝謝 – Brett

相關問題