翻译:iaau0908
最终,我还是在不久前给游戏加入了对多显示器的支持。
如果你有在一直关心Infinity的发展的话,也许你就会一边想着Kaboom22的三屏同显系统一边问:“恩?我以为她已经提供多显示器支持了呀!?”
其实这里面的秘密在于,Kaboom的系统使用了一个特殊的装置,Matrox公司的Triple head 2 go, 装置可以让Windows系统相信这儿只有1个物理显示器,而不是两个或者三个。对于程序来说它是完全透明的;Windows会认为是存在着一个高分辨率(比如3480X1024)的显示器。
但是如果你有1个多头显示系统(2或者3个显示器)却没有那个装置,比如我…好吧,你没戏了。
1周前我决定试试在I-Novae引擎里面加入多头显示支持。
从技术层面上说,这并不难。毕竟,你所要做的只是创建两个窗口,每个显示屏放置一个(在双显示器系统中),再创建两个视点,并把场景渲染两次。
当然,你的机器速度会降低1半(或者在3显示器系统里降到1/3)。
幸运的是,我采用了不同的方法。我仍然建立两个窗口,但是我会使用引擎的绘图管道生成出1个虚拟的off-screen缓存,而场景只用渲染一次。非常好!然后就是最后一步,把缓存的在两个显示器之间进行共享和拆分。
与此同时,由于你的第二个显示器不需要硬件加速,这个办法还能让你的机器快很多。因为从技术上说,渲染过程只在第一个显示设备外悄悄进行。
为了实现所有这些,我必须把引擎每一处地方的代码都优化一下,并加入一下新的东西。比如通过材质缓存在不同的图形库之间共享材质时会产生的一些微妙错误,1个显示器列表,对虚拟窗口的管理,等等等等…
结果很不错,而且如果设置得合适的话,影像甚至可以做到完美衔接。比如,看看下面这个,使用了双显示器配置,每个显示器的分辨率是1280X1024(点击放大到全屏):

这张图是通过简单地按一下截屏键得到的。
现在,再窗口模式下,你可以更清楚地看到缓冲过的内容是如何被分割成两个窗口的:

注意,这个技术并不要求窗口整齐地对齐成一行或者“接触”到一起,甚至它们可以有不同的大小!(意味着就算你的显示器们分辨率不一样,它们依旧可以完美地运行)
原文链接:http://www.infinity-universe.com/InfinityForums/viewtopic.php?t=6369
开发近况 - Multimonitor support(Posted - 12/1/2007)
开发近况 - 多显示器支持(发表于 - 12/1/2007)
Finally, I have recently added multimonitor support.
最终,我还是在不久前给游戏加入了对多显示器的支持。
If you’ve followed Infinity’s development for a while, you’ll probably go, “eh ? I thought it already supported multiple monitors !?”, thinking to Kaboom22’s triple-screen setup.
如果你有在一直关心Infinity的发展的话,也许你就会一边想着Kaboom22的三屏同显系统一边问:“恩?我以为她已经提供多显示器支持了呀!?”
The trick here is that Kaboom’s system used a special device, the Matrox Triple head 2 GO to make windows “believe” there’s only one physical monitor instead of 2 or 3. It’s completely transparent to the program; Windows just reports a single screen of a wide resolution ( like 3840x1024 ) instead of three.
其实这里面的秘密在于,Kaboom的系统使用了一个特殊的装置,Matrox公司的Triple head 2 go, 装置可以让Windows系统相信这儿只有1个物理显示器,而不是两个或者三个。对于程序来说它是完全透明的;Windows会认为是存在着一个高分辨率(比如3480X1024)的显示器。
But if you have a multimonitor setup ( 2 or 3 screens ) without this device, like me… well… you’re out of luck.
但是如果你有1个多头显示系统(2或者3个显示器)却没有那个装置,比如我…好吧,你没戏了。
A week ago I decided to have a look at adding support for multiple screens into the I-Novae engine.
1周前我决定试试在I-Novae引擎里面加入多头显示支持。
Technically, it’s not so hard. After all, all you need to do is to create two windows, one on each screen ( in case of a dual screen setup ), to create two cameras, and to render the scene twice.
从技术层面上说,这并不难。毕竟,你所要做的只是创建两个窗口,每个显示屏放置一个(在双显示器系统中),再创建两个视点,并把场景渲染两次。
Of course, you get a 2 times slow-down ( or 3 times in case of a triple config ).
当然,你的机器速度会降低1半(或者在3显示器系统里降到1/3)。
Fortunately, I took a different approach. I’m still creating my 2 windows, but I now use the engine’s pipeline to create one virtual off-screen buffer. The scene only has to be rendered once. Much better! Then in the final stage, the buffer is shared and split between the windows.
幸运的是,我采用了不同的方法。我仍然建立两个窗口,但是我会使用引擎的绘图管道生成出1个虚拟的off-screen缓存,而场景只用渲染一次。非常好!然后就是最后一步,把缓存的在两个显示器之间进行共享和拆分。
It’s also a lot faster in case your second monitor doesn’t have hardware acceleration, because technically, the rendering only happens off-screen on the first monitor’s device.
与此同时,由于你的第二个显示器不需要硬件加速,这个办法还能让你的机器快很多。因为从技术上说,渲染过程只在第一个显示设备外悄悄进行。
To implement all of this I had to tweak many small bits everywhere in the engine, and add new concepts. A few subtle bugs when sharing textures between different GL contexts with the texture cache. A monitor lister. Management of virtual windows. Etc…
为了实现所有这些,我必须把引擎每一处地方的代码都优化一下,并加入一下新的东西。比如通过材质缓存在不同的图形库之间共享材质时会产生的一些微妙错误,1个显示器列表,对虚拟窗口的管理,等等等等…
The result is pretty cool, and if properly set up, the images are perfectly seamless. For example, consider this one, taken on a dual monitor config, each screen being full-screen 1280x1024 (click for full-screen):
结果很不错,而且如果设置得合适的话,影像甚至可以做到完美衔接。比如,看看下面这个,使用了双显示器配置,每个显示器的分辨率是1280X1024(点击放大到全屏)

That pic was simply taken with the “Print Screen” key in Windows.
这张图是通过简单地按一下截屏键得到的。
Now, in windowed mode, you can see better how the buffer is split in 2 windows:
现在,再窗口模式下,你可以更清楚地看到缓冲过的内容是如何被分割成两个窗口的。

Note that nothing forces the windows to get perfectly aligned or to “touch”, and they can even be of different resolutions ( meaning that it’ll work perfectly even if your monitors have different resolutions ).
注意,这个技术并不要求窗口整齐地对齐成一行或者”接触“到一起,甚至它们可以有不同的大小(意味着就算你的显示器们分辨率不一样,它们依旧可以完美地运行)
哦呵呵,对论坛的结构不熟悉,不知道这个试着翻译的东西该贴到哪个版面,就直接跟帖咯。楼上各位高人,献丑了呵呵。自我感觉应该有80%的准确率吧…这样能胜任普通翻译组的工作么?