如何在GTX 560及更高版本上使用OpenGL进行立体3D?

时间:2012-01-18 23:16:09

标签: opengl 3d glut nvidia

我正在使用在Windows 7上运行的开源触觉和3D图形库Chai3D。我已经使用Nvidia nvision重写了库以进行立体3D。我正在使用带有GLUT的OpenGL,并使用glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_STEREO)来初始化显示模式。它在Quadro卡上运行良好,但在GTX 560m和GTX 580卡上,它表示像素格式不受支持。我知道显示器能够显示3D,我知道这些显卡能够呈现它。我已经尝试调整屏幕的分辨率和我能想到的其他一切,但似乎没有任何效果。我已经在各个地方阅读过使用OpenGL的立体3D仅在全屏模式下工作。因此,我能想到的唯一可能的原因是我在窗口模式下启动。如何在启用3D的情况下强制应用程序以全屏模式启动?任何人都可以使用OpenGL在后来的GTX型号卡上提供四缓冲立体3D的代码示例吗?

3 个答案:

答案 0 :(得分:7)

您所经历的没有技术原因,但仅仅是NVidia的产品政策。 Quadbuffer立体声被认为是一种专业功能,因此NVidia仅在其Quadro卡上提供它,即使GeForce GPU也可以这样做。这不是最近的发展。早在1999年就是这样的。例如,我当时(当时还有)GeForce2 Ultra。但从技术上讲,这是与Quadro相同的芯片,唯一的区别是PCI-ID报告回系统。人们可以通过修改PCI-ID(通过修补驱动程序或通过在显卡PCB上焊接额外的电阻)来欺骗驾驶员认为你有Quadro。

我的GeForce2已经支持Direct3D黑客的立体3D模式。然后,驱动程序复制了渲染命令,但是对模型视图应用了平移,并将偏移应用于投影矩阵。这些天它实现了着色器和多重目标技巧。

NVision3D API允许您为特定眼睛模糊图像(这适用于电影播放器​​和图像查看器)。但它也允许你模拟quadbuffer立体声:而不是GL_BACK_LEFT和GL_BACK_RIGHT缓冲区创建两个帧缓冲对象,你绑定和使用它们就好像它们是四缓冲立体声。然后在渲染之后将生成的图像(作为纹理)blit到NVision3D API。

只需50行管理代码,您就可以构建一个程序,可以在NVision3D和Quadbuffer立体声系统上无缝工作。 NVidia所做的事情毫无意义,他们应该立即停止它,并在消费者GPU上正确支持四缓冲立体像素格式。

答案 1 :(得分:2)

简单:你做不到。不是你想要的方式。

预先存在的程序与立体眼镜一起做事和做你正在尝试做的事情之间存在差异。您尝试做的是使用OpenGL的内置立体声支持:创建立体帧缓冲的能力,您可以在其中任意渲染左右帧缓冲区。

NVIDIA不允许使用非Quadro卡。它在驱动程序中存在黑客,它会在使用nVision和控制面板的应用程序上强制立体声。但NVIDIA的GeForce驱动程序不允许您创建立体帧缓冲区。

在你问之前,不,我不知道为什么NVIDIA不让你控制立体声。

答案 2 :(得分:0)

由于我正在为自己的游戏调查这个问题,我找到了这个链接,有人攻击了USB协议。 http://users.csc.calpoly.edu/~zwood/teaching/csc572/final11/rsomers/

我没有遵循它,但在我研究这个时,它并不难以利用这些信息。因此,您可能必须实现自己的代码才能在应用中支持它,这应该是可能的。不幸的是,通用解决方案会更难,因为那时你必须破解驱动程序或以某种方式挂钩到OpenGL库并拦截调用。