不幸的是,立体 3D 渲染比仅添加横向摄像机偏移更复杂。
您可以从原始“单声道”渲染帧和深度缓冲区创建立体 3D。给定场景中(现实世界)深度的范围,每个值的深度缓冲区会告诉您相应像素的距离。给定所需的眼睛分离值,您可以根据距离向左或向右滑动每个像素。但...
您想要两台摄像机最终会聚的平行轴立体(偏移不对称平截头体)还是“前束”立体?如果是后者,您将需要逐个场景调整摄像机角度,以避免“反转”超出会聚点的几何图形。
对于非常靠近观察者的物体,左眼和右眼看到同一物体的完全不同的图像,甚至左眼看到物体的一侧而右眼看到另一侧 - 但单视图会平均这些到前面。如果您想要一个准确的立体 3D 图像,它确实必须从不同的眼睛视点进行渲染。这有关系吗?FPS射击游戏,可能不是。人体手术训练模拟器,你敢打赌。
如果观看者将头向一侧倾斜,则会出现类似的问题,因此一只眼睛比另一只眼睛高。同样,对于游戏来说可能并不重要,对于外科医生来说真的很重要。
哦,你在场景中有抗锯齿或透明度吗?现在你有了一个真正代表不同深度的两个像素值的像素。横向移动一个抗锯齿像素,它可能看起来更糟,因为“下面”的颜色已经改变。侧向移动一个大部分透明的像素,后面的像素会移动得太远。
您如何处理瞄准具十字和类似的 HUD 元素?如果在禁用深度缓冲区的情况下绘制它们,深度缓冲区值可能会使它们在数百米之外。
考虑到所有这些潜在的问题,OpenGL 明智地并没有试图说明应该如何进行立体 3D 渲染。根据我的经验,修改 OpenGL 程序以进行立体渲染比一开始就编写它要省力得多。
Shameless self promotion: this might help
http://cs.anu.edu.au/~Hugh.Fisher/3dteach/stereo3d-devel/index.html