【问题标题】:How to do stereoscopic 3D with OpenGL on GTX 560 and later?如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?
【发布时间】:2012-02-13 16:37:07
【问题描述】:

我正在使用在 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 的四缓冲区立体 3D 的代码示例,该示例适用于后来的 GTX 模型卡?

【问题讨论】:

    标签: opengl 3d glut nvidia


    【解决方案1】:

    您所体验到的没有技术原因,而只是 NVidia 的产品政策。 Quadbuffer 立体声被认为是一项专业功能,因此 NVidia 仅在他们的 Quadro 卡上提供它,即使 GeForce GPU 也能做到。这不是最近的事态发展。早在 1999 年就已经是这样了。例如,当时我有(仍然有)GeForce2 Ultra。但从技术上讲,这与 Quadro 的芯片完全相同,唯一的区别是向系统报告的 PCI-ID。可以通过修改 PCI-ID(通过修补驱动程序或在显卡 PCB 上焊接一个额外的电阻器)来欺骗驱动程序以为您拥有 Quadro。

    当时我的 GeForce2 已经支持 Direct3D hack 的立体 3D 模式。那时,驱动程序复制了渲染命令,但对模型视图应用了平移,对投影矩阵应用了倾斜。这些天来,它实现了一个着色器和多渲染目标技巧。

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

    只需 50 行管理代码,您就可以构建一个在 NVision3D 和 quadbuffer stereo 上无缝运行的程序。 NVidia 所做的一切毫无意义,他们应该立即停止它,并在消费级 GPU 上正确支持四缓冲区立体像素格式。

    【讨论】:

    • 谢谢。最后给出一些答案。您能否提供此管理代码的示例或指向我的来源?如何让眼镜进入 3D 模式并与 blitting 图像同步?我在 nvidia 控制面板中没有看到任何强制 3D 模式的选项。
    • @datenwolf,你能评论 the reports 新的驱动程序在 GTX 卡上启用四倍缓冲吗?
    • @foobarbecue:我必须调查一下。关于立体视觉,这些天我主要在做 VR 和 HMD 的东西,整个 quadbuffer 支持对那些人来说不是问题。
    • @datenwolf:你有机会调查一下吗?我对 GTX 750 Ti 的体验好坏参半。 Blender 的multiview branch 中的 Quadbuffer 在 Blender 游戏引擎中工作,但在 Blender 视口中不起作用。我无法让我的任何其他 OpenGL 立体程序工作。无法弄清楚如何将 750 改装成 Quadro,所以我想我可能只需要购买 Quadro :-(
    • @foobarbecue:对不起,我还没找到时间。
    【解决方案2】:

    很简单:你不能。不是你想要的方式。

    让一个预先存在的程序用立体眼镜做事和做你想做的事是有区别的。您尝试做的是使用 OpenGL 的内置立体支持:创建立体帧缓冲区的能力,您可以在其中任意渲染到左右帧缓冲区。

    NVIDIA 不允许在他们的非 Quadro 卡上这样做。它在驱动程序中有一些技巧,可以强制在带有 nVision 和控制面板的应用程序上使用立体声。但是 NVIDIA 的 GeForce 驱动程序不允许您创建立体帧缓冲区。

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

    【讨论】:

    • 嗯,我知道 DirectX 是可能的。那么,OpenGL 有什么问题呢?是否可以使用 DirectX 初始化 3D,然后使用 OpenGL 进行所有绘图等...?
    • 而且,仔细想想,我知道我的 GTX 580 是一个 quadro 级卡(它使用相同的架构)。我听说有些人能够修改驱动程序以使其成为四轮驱动。
    • @JohnJenkins:不,不是。 D3D 没有用于立体渲染的 API。你说的是幕后的司机把戏,仅此而已。 D3D 11.1明确支持立体显示,但 11.0 和所有之前的版本都没有。
    • 你能指出任何黑客或解决方法吗?我真的需要一个解决方案。我的老板希望它像 6 个月前一样工作。任何建议表示赞赏。
    • 我已经使用 DirectX 与 Google 地球一起获得了立体 3D,所以我知道这是可能的。我对此进行了相当多的研究,我认为在屏幕模式初始化方面我只是做错了一些事情。我正在寻找一个使用 OpenGL 为后来的 GTX 卡初始化 3D 的正确方法示例。
    【解决方案3】:

    由于我正在为自己的游戏调查此问题,因此我发现了此链接,其中有人破解了 USB 协议。 http://users.csc.calpoly.edu/~zwood/teaching/csc572/final11/rsomers/

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      相关资源
      最近更新 更多