鉴于对3D图形渲染的天真看法,立体3D渲染对于开发人员来说应该是基本透明的,并且完全是图形硬件和驱动程序的一个特征.无论OpenGL窗口在何处显示场景,都需要几何,光照,相机和纹理等信息来渲染场景的2D图像.
将立体3D添加到场景似乎基本上意味着使用两个横向偏移的相机,其中最初有一个,并且所有其他场景变量保持不变.然后唯一的附加信息是制作相机的距离以及使它们的中心光线会聚多远.鉴于此,采用GL命令序列并在驱动程序级交错适当的命令以驱动3D渲染似乎是微不足道的.
虽然应用程序需要专门编写才能使用特殊的3D硬件架构,这使得它很麻烦且难以实现.我们是否希望这是立体3D实现的未来,还是我对太多重要细节的掩饰?
在我的具体情况下,我们使用的是.net OpenGL视口控件.我原本希望只需启用立体声硬件和驱动程序即可启用立体3D.
你的假设是错误的.OpenGL不"采用几何体,照明相机和纹理信息来渲染2D图像".OpenGL接受命令来操纵其状态机和命令来执行绘制调用.
正如没有人在他的评论中提到的那样,核心概况甚至根本不关心转型.它现在唯一真正提供的是向顶点着色器提供任意数据的方法,以及用于渲染的任意3D立方体.对于与实际观点相对应或不对应的,GL不关心,也不应该关注.
请注意,有些人已经注意到驱动程序可以尝试猜测视图是什么,什么不是,这就是nvidia驱动程序在进行自动立体渲染时尝试做的事情.这需要一些特定的猜测工作,这相当于对游戏渲染的实际分析,以调整算法,以便驾驶员猜对了.所以它通常是每个标题,在驱动程序内的变化.一些开发人员已经注意到驱动程序可能猜错了,当发生这种情况时,它开始变得混乱.查看这些问题的第一手资料.
我真的建议你阅读那个演示文稿,因为它进一步说明了摄像机应指向的位置(如果2个视图方向是平行的等等).
而且,事实证明,对于视图相关的所有内容,渲染的成本基本上是其两倍.一些开发人员(包括,例如,Crytek人员,见第2部分)发现,在很大程度上,你可以做一个渲染,并用附加数据捏造图片来生成左眼和右眼图片.这里保存的工作量本身就很有价值,开发人员自己也可以这样做.