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

想象一个大的真实世界的场景呈现在这三个显示器上。这三种显示器应该显示场景,因为它将根据用户的位置在每个显示器上显示一个变化的透视图。我可以用一个显示器来根据用户的位置渲染一个场景,但是我想不出在三个屏幕上实现这个场景的方法。
我创建的类离轴投影基本上完成了以下操作:
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);
}我怎么把这三个水果贴在这样的方式上,使场景看上去和现实世界一样连续?当前,该类的用户绘制一个场景如下:
cstCam.project();
//draw something here
popMatriceS(); //which were pushed before glFrustum projection编辑:在我的例子中,为了为用户定义三个结果(在相同的参考框架中为所有显示的用户和屏幕角),我做了以下工作:
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();
}发布于 2013-06-14 22:38:26
这并不像看起来那么困难。考虑一下下面的图像(从上面看的三个屏幕都是从近的角度看的)

我假设每个屏幕在x方向上跨越近距离的两个单位.根据场景的不同,您可能需要缩放此值。
Y坐标的范围对于这三个屏幕没有变化,因为它们处于相同的垂直位置。
所以屏幕需要三个不同的投影矩阵。确定偏移量是相当简单的。你只需要与摄像机的不同点:
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。
https://stackoverflow.com/questions/17115033
复制相似问题