我正在尝试使用并行技术在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并以某种方式修改它来完成?
答案 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 }}