【问题标题】:Why can't I display same object in multiple viewports?为什么我不能在多个视口中显示相同的对象?
【发布时间】:2010-03-31 20:21:44
【问题描述】:

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

【问题讨论】:

    标签: opengl


    【解决方案1】:

    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)

    【讨论】:

    • 太棒了!我知道我哪里错了。但是,我认为对于我试图实现的目标,我没有说清楚,纵横比是正确的。我试图在两个对角线视口中显示视图,因此我总共需要 4 个视口的空间。因此,我认为我原来的纵横比是正确的(尽管毫无意义地除以 2)。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多