首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用glFrustum创建拼接场景

使用glFrustum创建拼接场景
EN

Stack Overflow用户
提问于 2013-06-14 18:28:01
回答 1查看 321关注 0票数 6

我有一个程序,在其中,我可以根据用户的位置在屏幕上进行场景渲染。当用户改变位置时,圆柱体改变给出轴投影.我想利用这一技术在三种不同的显示器上拼接一个更大的场景,其中包括以下几种:

想象一个大的真实世界的场景呈现在这三个显示器上。这三种显示器应该显示场景,因为它将根据用户的位置在每个显示器上显示一个变化的透视图。我可以用一个显示器来根据用户的位置渲染一个场景,但是我想不出在三个屏幕上实现这个场景的方法。

我创建的类离轴投影基本上完成了以下操作:

代码语言:javascript
复制
customCam::project(){
pushMatrices();
glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
        glFrustum(leftNear.x, rightNear.x, bottomNear.y, topNear.y, _near, _far);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(uPos.x, uPos.y, 0, uPos.x, uPos.y, -1, 0, 1, 0); //neglect z scaling for now. In the main program, it's there
    glTranslatef(0, 0, uPos.z);
}

我怎么把这三个水果贴在这样的方式上,使场景看上去和现实世界一样连续?当前,该类的用户绘制一个场景如下:

代码语言:javascript
复制
cstCam.project();
    //draw something here
popMatriceS(); //which were pushed before glFrustum projection

编辑:在我的例子中,为了为用户定义三个结果(在相同的参考框架中为所有显示的用户和屏幕角),我做了以下工作:

代码语言:javascript
复制
custCam1.project();
//draw scene here. eg: two walls at the far left and right screen
drawWalls();
popMatrices();
custCam2.project();
drawWalls();
popMatrices();
custCam3.project();
drawWalls();
popMatrices();

void drawWalls(){
//Left most corner screen wall
glBegin(GL_QUADS);
glVertex3f(-1.5*PHWIDTH, HEIGHT/2, 0); //where PHWIDTH, HEIGHT is the physical width/height of each screen
glVertex3f(-1.5*PHWIDTH, HEIGHT/2, -50);
glVertex3f(-1.5*PHWIDTH, -HEIGHT/2, -50);
glVertex3f(-1.5*PHWIDTH, -HEIGHT/2, 0);
glEnd();

//Right most corner screen wall
glBegin(GL_QUADS);
glVertex3f(1.5*PHWIDTH, HEIGHT/2, 0); //where PHWIDTH, HEIGHT is the physical width/height of each screen
glVertex3f(1.5*PHWIDTH, HEIGHT/2, -50);
glVertex3f(1.5*PHWIDTH, -HEIGHT/2, -50);
glVertex3f(1.5*PHWIDTH, -HEIGHT/2, 0);
glEnd();
}
EN

回答 1

Stack Overflow用户

发布于 2013-06-14 22:38:26

这并不像看起来那么困难。考虑一下下面的图像(从上面看的三个屏幕都是从近的角度看的)

我假设每个屏幕在x方向上跨越近距离的两个单位.根据场景的不同,您可能需要缩放此值。

Y坐标的范围对于这三个屏幕没有变化,因为它们处于相同的垂直位置。

所以屏幕需要三个不同的投影矩阵。确定偏移量是相当简单的。你只需要与摄像机的不同点:

代码语言:javascript
复制
left screen   => [-3 - camera.x, -1 - camera.x]
center screen => [-1 - camera.x, 1 - camera.x]
right screen  => [1 - camera.x, 3 - camera.x]

当然,你需要相机的位置,在屏幕的空间,在图中。

视图矩阵可以是任意的,但对于所有三个屏幕都应该是相同的。这一次,将镜头在场景空间中的位置传递给gluLookAt

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17115033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档