为什么我不能在多个视口中显示相同的对象?

时间:2010-03-12 16:03:47

标签: opengl

我对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.我显然做错了什么但是什么?感谢

1 个答案:

答案 0 :(得分:3)

glViewport的参数是视口的左下角x和y,然后是宽度和高度。

对于100像素正方形的窗口,您的两个视口指定为:

x1 = 0,y1 = 50,width1 = 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)