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