调整现有的OpenGL立体渲染代码?

时间:2011-02-15 10:09:43

标签: opengl

我正在尝试使用并行技术在OpenGL中实现立体3D。

我已阅读this article,其中详细说明了如何为左右视图设置相机。它使用相机模型并使用gluLookAt设置左右视图。

但是在我的情况下,我想调整已经设置投影的现有代码

请参阅以下示例,其中“existingcode”表示我无法更改的代码。

//Render left view

// setUpCamera set the gl projection and model matrix
existingcode.setUpCamera()

..
here I want to somehow modify the current gl projection matrix for the left view
..

existingcode.renderScene()

//.. then render right view

是否可以通过调用glGetMatrix并以某种方式修改它来完成?

1 个答案:

答案 0 :(得分:3)

你要做的就是使用一些镜头shiftig。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
stereo_offset = eye * near * parallax_factor / convergence_distance;
glFrustum(stereo_offset + left, stereo_offset + right, bottom, top, near, far);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(eye * parallax_factor * convergence_distance, 0, 0);

/* now use gluLookAt here as this were a normal 2D rendering */

parallax_factor不应大于half_eye_distance / screen_width的比率,因此屏幕越大,parallax_factor越小。用于计算机显示器的parallax_factor的一个很好的价值是0.05,对于大屏幕(想想看电影)它就像0.01

这种投影移位技术正是我用于在立体3D中重新渲染 Elephants Dream 的技术,但是,由于Blenders离线渲染器不使用OpenGL,因此代码看起来有点不同{{3 }}