我可以使用哪些工具,API,库来创建一个能够在由4,8,9,16等屏幕/投影仪组成的显示器中实时渲染高分辨率3D场景的系统?对于使用8台投影机的设置,我应该选择集群解决方案,还是应该使用具有4个双头显卡的单个节点?有人有这方面的经验吗?
答案 0 :(得分:5)
Equalizer可能是您会找到的更好的解决方案之一。
它专门用于拆分渲染并将它们分布在显示器上。
说明强>
均衡器允许用户缩放渲染性能,视觉质量和显示尺寸。基于均衡器的应用程序在任何可视化系统上都可以不加修改地运行,从简单的工作站到大型图形集群,多GPU工作站和虚拟现实安装。
均衡器的使用示例:
我曾经尝试过在没有均衡器的情况下尝试做类似事情的项目,我可以诚实地说它非常糟糕。我们只是勉强工作。在稍后找到均衡器后,我无法想象使用这种工具会有多容易。
答案 1 :(得分:2)
使用X11 / Xorg时,您可以使用 Xinerama 或 XRandR 。但是引用维基百科Xinerama:
在大多数实现中,OpenGL(3D) 直接渲染只适用于其中一个 屏幕。应该显示的Windows 其他屏幕上的3D图形倾向于 只是显得黑色。这是最多的 常见于3D屏幕保护程序, 在其中一个屏幕上显示 黑色在其他人。 (Solaris SPARC OpenGL实现允许 直接渲染到所有屏幕 Xinerama模式,和nvidia一样 两台显示器都在上面时的驱动程序 相同的视频卡。)
我建议你先阅读维基百科文章。
答案 2 :(得分:2)
我在我的游戏装备上使用其中一个漂亮的TripleHead2Go来从一个显卡驱动3个显示器(即使在Vista中)。两个显示器中间有一个挡板,对于游戏来说有点令人失望。
(来源:maximumpc.com)
我发现了他们,因为我们正在考虑使用他们中的几个来驱动我们拥有大约9个显示器的系统。我想我们最终选择了一个带有5个PCI-X插槽和每个插头的双头卡的系统。如果您在主板上安装了许多PCI插槽时遇到问题,可以使用PCI-X总线扩展系统。
答案 3 :(得分: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,以及Matrox TripleHead2Go在Windows XP上运行。
答案 4 :(得分:1)
我知道python的pyglet OpenGL包装器(http://www.pyglet.org)具有多平台多监视器支持;您可能希望查看其源代码并弄清楚它是如何实现的。