4

我可以使用哪些工具、API、库来创建能够在由 4、8、9、16 等屏幕/投影仪组成的显示器中实时渲染高分辨率 3D 场景的系统?对于具有 8 台投影仪的设置,我应该选择集群解决方案,还是应该使用具有 4 个双头视频卡的单个节点?有人有这方面的经验吗?

4

5 回答 5

5

均衡器可能是您能找到的更好的解决方案之一。

它专为拆分渲染并将它们分布在显示器上而设计。

描述:

均衡器允许用户缩放渲染性能、视觉质量和显示尺寸。基于均衡器的应用程序无需修改即可在任何可视化系统上运行,从简单的工作站到大型图形集群、多 GPU 工作站和虚拟现实安装。

均衡器的示例用法:

渲染墙
(来源:equalizergraphics.com

我曾参与过尝试在没有均衡器的情况下做类似事情的项目,老实说,这非常糟糕。我们只是勉强工作。后来找到均衡器后,我无法想象使用这样的工具会变得多么容易。

于 2009-02-04T20:46:46.770 回答
2

我在家里的游戏设备上使用这些漂亮的TripleHead2Go之一从一张视频卡驱动 3 个显示器(即使在 Vista 中)。两个中间有一个挡板的显示器对于游戏来说有点糟糕。 TripleHead2Go
(来源:maximumpc.com

我发现它们是因为我们正在考虑在工作中使用它们中的几个来驱动我们的具有大约 9 个显示器的系统。我认为为此我们最终选择了一个具有 5 个 PCI-X 插槽和一个双头卡的系统。如果您无法在主板上安装那么多 PCI 插槽,可以使用 PCI-X 总线扩展系统。

于 2009-02-04T23:24:05.533 回答
2

在使用 X11/Xorg 时,您可以使用XineramaXRandR 。但是要引用Xinerama上的维基百科:

在大多数实现中,OpenGL (3D) 直接渲染仅适用于其中一个屏幕。应该在其他屏幕上显示 3D 图形的窗口往往只是显示为黑色。这在 3D 屏幕保护程序中最常见,它在一个屏幕上显示而在其他屏幕上显示为黑色。(Solaris SPARC OpenGL 实现允许在 Xinerama 模式下直接渲染到所有屏幕,当两个显示器在同一个视频卡上时,nvidia 驱动程序也是如此。)

我建议你先阅读维基百科的文章。

于 2009-02-04T20:34:38.933 回答
2

你应该看看“ AMD Radeon HD 5870 Eyefinity 6-edition ”显卡。这支持同时输出到六个显示器,并允许在驱动程序中设置有关输出排列的多个选项(连续 3 个、2x3 水平/垂直)等)。

关于 API:使用这样的卡(但也使用 TripleHead2Go),您将获得一个虚拟画布,它支持完整的 3D 加速而不会损失性能(比扩展桌面好得多)。在 AMD,他们称之为单一大表面(可能相当于 NVidia 所说的水平/垂直跨度)。这里需要注意的是,所有输出都需要具有相同的分辨率、帧速率和颜色深度。这样的表面可能具有 5760 x 3240 或更高的分辨率,具体取决于设置,因此 5870 的速度如此之快是件好事。

然后,在您的应用程序中,您渲染到这个大型虚拟画布(使用 OpenGL、Direct3D 或其他方式),您就完成了……除了您没有说是否要让显示器与每个画布成一定角度其他或平面配置。在后一种情况下,您可以只使用单个透视相机并渲染到整个后缓冲区。但是如果你有更多的“环绕”设置,那么你需要在你的场景中有多个摄像机,所有摄像机都从同一个点向外看。

执行此渲染的最快循环可能是:

for all all objects
    set textures and shader and renderstate
    for all viewports
        render object to viewport

并不是

for all viewports
    for all objects
         set textures and shader and renderstate
         render object to viewport

因为切换对象会导致 GPU 从其状态和缓存中丢失比切换视口更多的有用信息。

您可以联系 AMD 以检查是否可以将其中两张卡(电源允许)添加到单个系统以驱动多达 12 台显示器。

请注意,并非所有配置都受支持(例如,不支持 5x1,正如我从常见问题解答中看到的那样)。

我在这方面的很多经验都是在创建Future Flight Experience项目期间收集的,该项目使用三个投影仪(每个投影仪在 3D 场景中都有自己的摄像头)、SLI 中的双 Nvidia GTX 280 和 Windows XP 上的 Matrox TripleHead2Go .

于 2011-05-13T21:20:54.093 回答
1

我知道 python 的 pyglet OpenGL 包装器 ( http://www.pyglet.org ) 具有多平台多监视器支持;您可能想查看他们的源代码并弄清楚它是如何实现的。

于 2009-02-05T00:41:35.533 回答