带有Surround插件的3显示器输出
Surround旨在跨三个监视器跨越基于UNIGINE的项目。它允许扩展虚拟世界的边界,同时保持对渲染视口的完全控制。
硬体需求#
启动Surround应该同时满足两个硬件要求:
- 一个视频卡或NVIDIA SLI系统上至少有3个视频同时输出。
- AMD Radeon HD 6000系列或NVIDIA GeForce 600系列GPU。
也可以看看#
- engine.surround函数
-
<UnigineSDK>/data/samples/plugins/app_surround_00和<UnigineSDK>/data/samples/plugins/app_surround_01样本以获取更多详细信息。
要从UNIGINE SDK Browser运行第一个样本,请按Plugin Samples选项卡上的Surround plugin按钮。
启动Surround#
Surround既可以在窗口模式下也可以在全屏模式下渲染。
通常需要将应用程序与插件库(lib/Surround_*)一起启动启动参数(例如渲染API,窗口大小等)。
main_x64 -extern_plugin Surround
您可以使用该库的64位调试或发行版本。 (引擎会根据指定的主应用程序自动加载相应版本的库。)
不能将Surround用于:
- 多显示器插件(Wall, Projection)
- 全景渲染
- 立体3D
自定义Surround#
可以自定义Surround,以在渲染到三个监视器时支持任何自定义的视锥(对称或不对称的视锥)。
Surround相机#
Surround在中心有一个主视口,而所有其他视口则被渲染为辅助视口。默认情况下,主显示是用于单显示器配置的UNIGINE引擎视口。它使用引擎使用的Player矩阵查看场景。其他显示器是具有任意角度并面向所需方向的任意摄像机。每个显示器都有自己的模型视图和投影矩阵。如果需要,可以启用或禁用主监视器和辅助监视器。
如何自定义相机配置#
就像使用Wall一样,渲染Surround视口也由wall.h脚本(位于<UnigineSDK>/data/core/scripts/system中)控制。
要实现自定义摄像机配置,请在unigine.usc系统脚本中将wall.h注释掉,并在系统脚本的render()函数中将您的自定义代码与#ifdef HAS_SURROUND ... #endif包装在一起:
int render() {
#ifdef HAS_SURROUND
// place an implementation of a
// custom camera configuration here
// ...
#endif
return 1;
}
根据中央监视器的呈现方式,有两种可能的设置。可以通过以下方式得出:
- 默认引擎渲染器(与呈现通常的单显示器应用程序时相同)。
- Surround渲染器本身(如果要对中央监视器使用不对称的视锥,并修改其Modelview矩阵,则更加安全)。
以下示例演示了如何调整摄像机配置并选择中央监视器的渲染器。
1.使用默认引擎渲染器#
第一种变体是通过默认引擎渲染器渲染中央(主)监视器。
-
通过engine.surround.setEnabled()启用两个侧面(辅助)监视器。默认情况下,所有Surround监视器都处于禁用状态。中央的那个应该被禁用,因为它是由默认引擎渲染器绘制的。
// Enable the 1-st and the 3-rd monitors. // The third argument of the function sets the "enabled" flag. engine.surround.setEnabled(0,1); engine.surround.setEnabled(2,1);
-
通过engine.surround.setProjection()和engine.surround.setModelview()设置侧面监视器的投影和模型视图矩阵。
// Settings for the 1-st monitor engine.surround.setProjection(0,projection_0); engine.surround.setModelview(0,modelview_0); // Settings for the 3-rd monitor engine.surround.setProjection(2,projection_1); engine.surround.setModelview(2,modelview_1);
2.使用Surround渲染器#
另一个变体是通过Surround渲染器渲染中央监视器。例如,如果要为所有监视器设置对称的视锥台,则可以使用此变体。
-
通过engine.render.setEnabled()禁用渲染到默认的UNIGINE视口:
engine.render.setEnabled(0);
-
启用所有三个Surround监视器,包括主要的一个。结果,所有三个视口将由Surround渲染器本身渲染:
// Enable all three monitors: engine.surround.setEnabled(0,1); engine.surround.setEnabled(1,1); engine.surround.setEnabled(2,1);
-
为所有三个监视器设置模型视图和投影矩阵。
// Settings for the 1-st monitor engine.surround.setProjection(0,projection_0); engine.surround.setModelview(0,modelview_0); // Settings for the 2-nd (primary) monitor engine.surround.setProjection(1,projection_1); engine.surround.setModelview(1,modelview_1); // Settings for the 3-rd monitor engine.surround.setProjection(2,projection_2); engine.surround.setModelview(2,modelview_2);