gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:57:08 25 4
gpt4 key购买 nike

我对OpenGL很陌生。我在玩一些代码,但我不明白为什么下面不会产生具有相同对象 View 的两个视口(viewport)。这是代码:

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()只是绘制一个矩形数组。问题是第二个视口(viewport)是第一个视口(viewport)的压缩表示。我的窗口宽度是 1280,高度是 960。我显然做错了什么,但是什么?谢谢

最佳答案

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

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

x1 = 0,y1 = 50,width1 = 50,height1 = 100。

x2 = 50,y2 = 0,宽度2 = 100,高度2 = 50。

这些位置和大小将第一个视口(viewport)放在窗口的左上象限,一半悬在窗口顶部,第二个视口(viewport)放在窗口的左下象限,一半悬在窗口的侧面。

对于并排的视口(viewport),我认为您想要:

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

或者我认为你想要的顶部和底部视口(viewport):
glViewport(0, 0, windowWidth, windowHeight/2);
// drawing code
glViewport(0, windowHeight/2, windowWidth, windowHeight/2);
// repeat drawing code

您的第二个视口(viewport)被压扁的原因是因为它的纵横比被反转,因此 gluPerspective 的参数是错误的。纵横比参数应为 (windowWidth/2)/windowHeight对于上面的第一个选项, windowWidth/(windowHeigh/2)在上面的第二个选项中。

关于opengl - 为什么我不能在多个视口(viewport)中显示相同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com