我遇到了一个 C++ 3D 应用程序项目,该项目将使用 3 台显示器,每台显示器都来自不同的相机。
最近我了解了 Ogre3D,但不清楚它是否支持将不同的相机输出到不同的显示器/GPU。
有没有人有类似的设置和食人魔或其他引擎的经验?
在 OGRE3D 的情况下,关于多头支持有几件事要说。根据我的经验,一个可行的解决方案是使用 Ogre 1.6.1 的源版本并应用这个补丁。使用这个补丁,用户已经设法在6 个监视器配置上渲染 Ogre 应用程序。
就个人而言,我已经成功地应用了这个补丁,并将它与StereoManager 插件一起使用,以将 Ogre 应用程序与 3D 投影仪连接起来。我只使用了 Direct3D9 后端。StereoManager 插件附带一个修改后的演示 ( Fresnel_Demo
),它可以帮助您设置您的第一个多头应用程序。
我还应该补充一点,从 1.7 版开始,多头补丁现在是 Ogre 核心的一部分。Ogre1.7 最近作为 RC1 发布,所以这可能是让它工作的最快和最简单的方法。
至少在大多数系统(例如,Windows、MacOS)上,窗口系统创建一个虚拟桌面,不同的监视器映射到桌面的不同部分。如果您愿意,您可以(例如)创建一个覆盖所有三个显示器的大窗口。如果您将该窗口设置为使用 OpenGL,则几乎所有使用 OpenGL(几乎可以肯定包括 Ogre3D)的东西都可以正常工作,尽管在某些情况下,产生如此高的输出分辨率可能会对显卡造成负担,以至于它比平时慢一点.
如果您想在每个显示器上处理一个单独的窗口,事情可能会更复杂一些。OpenGL 本身并没有(甚至试图)定义如何处理多个窗口中的显示——这取决于特定于平台的一组函数。例如,在 Windows 上,每个窗口都有一个渲染上下文,并且必须使用WGLMakeCurrent
它来选择在任何给定时间绘制到哪个渲染上下文。
如果没记错的话,Ogre3D 的 Windows 端口支持多个渲染上下文,所以这也应该不是问题。我希望它也可以在其他系统上与多个窗口一起使用,但我没有在任何其他系统上使用它,所以我不能肯定地说。
然而,我的直接猜测是,三重显示器支持在您的整体开发工作中几乎是无关紧要的。当然,这确实意味着您(可以告诉您的老板)需要一个三重显示器设置来进行开发和测试,这当然不是一件坏事!:-)
编辑:OpenGL 本身并没有指定关于全屏窗口与普通窗口的任何内容。如果没记错的话,至少在 Windows 上要获得全屏应用程序,您可以ChangeDisplaySettings
使用CDS_FULLSCREEEN
. 之后,它基本上将整个虚拟桌面视为一个窗口。不过,我不记得曾用多台显示器做到这一点,所以我不能肯定地说太多。