带有AppSurround插件的3显示器输出
您应该升级到
AppSurround is designed to span the UNIGINE-based project across three monitors. It allows expanding the borders of the virtual world while keeping the full control over the rendered viewports.AppSurround旨在跨三个监视器跨越基于UNIGINE的项目。它允许扩展虚拟世界的边界,同时保持对渲染视口的完全控制。
Hardware Requirements硬体需求#
Both hardware requirements should be met to launch AppSurround:启动AppSurround应该同时满足两个硬件要求:
- At least 3 video simultaneous outputs on a one video card or NVIDIA SLI system.一个视频卡或NVIDIA SLI系统上至少有3个视频同时输出。
- AMD Radeon HD 6000 Series or NVIDIA GeForce 600 Series GPU.AMD Radeon HD 6000系列或NVIDIA GeForce 600系列GPU。
See Also也可以看看#
- engine.surround functionsengine.surround函数
-
<UnigineSDK>/data/samples/plugins/app_surround_00 and <UnigineSDK>/data/samples/plugins/app_surround_01 samples for additional details.<UnigineSDK>/data/samples/plugins/app_surround_00和<UnigineSDK>/data/samples/plugins/app_surround_01样本以获取更多详细信息。
To run the first sample from the UNIGINE SDK Browser, press the AppSurround plugin button on the Plugin Samples tab.要从UNIGINE SDK Browser运行第一个样本,请按Plugin Samples选项卡上的AppSurround plugin按钮。
Launching AppSurround启动AppSurround#
AppSurround can be rendered both in the windowed and in the full screen mode.AppSurround既可以在窗口模式下也可以在全屏模式下渲染。
Launch the application together with a plugin library (lib/AppSurround_*) with the usually required start-up arguments (such as rendering API, window size, etc.).通常需要将应用程序与插件库(lib/AppSurround_*)一起启动启动参数(例如渲染API,窗口大小等)。
main_x64 -extern_plugin AppSurround
You can use 64-bit debug or release versions of the library. (The engine automatically loads the appropriate version of the library depending on the specified main application.)您可以使用该库的64位调试或发行版本。 (引擎会根据指定的主应用程序自动加载相应版本的库。)
It is not possible to use AppSurround with:不能将AppSurround用于:
- Multi-monitor plugins (AppWall, AppProjection)多显示器插件(AppWall, AppProjection)
- Panoramic rendering全景渲染
- Stereo 3D立体3D
Customizing AppSurround自定义AppSurround#
AppSurround can be customized to support any custom viewing frustums (symmetric or asymmetric ones) when rendering onto three monitors.可以自定义AppSurround,以在渲染到三个监视器时支持任何自定义的视锥(对称或不对称的视锥)。
AppSurround CamerasAppSurround相机#
AppSurround has one primary viewport in the center, while all others are rendered as auxiliary ones. By default, the primary display is the UNIGINE engine viewport used for one-monitor configuration. It uses matrices of the Player used by the engine to view the scene. Other displays are arbitrary cameras with any perspective and facing whatever direction needed. Each display has its own modelview and projection matrices. Both the primary monitor and auxiliary ones can be enabled or disabled, if necessary.AppSurround在中心有一个主视口,而所有其他视口则被渲染为辅助视口。默认情况下,主显示是用于单显示器配置的UNIGINE引擎视口。它使用引擎使用的Player矩阵查看场景。其他显示器是具有任意角度并面向所需方向的任意摄像机。每个显示器都有自己的模型视图和投影矩阵。如果需要,可以启用或禁用主监视器和辅助监视器。
- The central monitor is a primary one. Two side monitors are auxiliary monitors that can be arbitrary cameras with any perspective and facing whatever direction needed.中央监控器是主要的监控器。两侧监视器是辅助监视器,可以是任何摄像机,任何角度和面向任何方向的辅助监视器。
- Each display, including the primary one, has its own modelview and projection matrices.每个显示器,包括主要的显示器,都有自己的模型视图和投影矩阵。
- By default, only a primary one has an interface (render system GUI, editor widgets, wireframe, or the profiler). However, separate GUIs can be drawn on all monitors.默认情况下,只有主要的一个具有接口(渲染系统GUI,编辑器小部件,线框或分析器)。但是,分开图形用户界面可以在所有监视器上绘制。
- All viewports have their own viewport and Reflection mask to selectively render nodes and reflections from them.所有视口都有自己的视口反射遮罩可选择性地渲染节点和来自节点的反射。
How to Customize Cameras Configuration如何自定义相机配置#
Just like in case with AppWall, rendering of AppSurround viewports is controlled by the wall.h script (found in <UnigineSDK>/data/core/scripts/system).就像使用AppWall一样,渲染AppSurround视口也由wall.h脚本(位于<UnigineSDK>/data/core/scripts/system中)控制。
To implement a custom camera configuration, comment wall.h out in the unigine.usc system script and wrap your custom code around with #ifdef HAS_APP_SURROUND ... #endif in the render() function of the system script:要实现自定义摄像机配置,请在unigine.usc系统脚本中将wall.h注释掉,并在系统脚本的render()函数中将您的自定义代码与#ifdef HAS_APP_SURROUND ... #endif包装在一起:
int render() {
#ifdef HAS_APP_SURROUND
// place an implementation of a
// custom camera configuration here
// ...
#endif
return 1;
}
There are two possible setups depending on how the central monitor is rendered. It can be drawn by:根据中央监视器的呈现方式,有两种可能的设置。可以通过以下方式得出:
- The default engine renderer (the same as when a usual one-monitor application is rendered).默认引擎渲染器(与呈现通常的单显示器应用程序时相同)。
- The AppSurround renderer itself (which is safer if you are going to use asymmetric frustum for the central monitor and modify its modelview matrix).AppSurround渲染器本身(如果要对中央监视器使用不对称的视锥,并修改其Modelview矩阵,则更加安全)。
The following example demonstrates how to tweak cameras configuration and choose the renderer for the central monitor.以下示例演示了如何调整摄像机配置并选择中央监视器的渲染器。
1. Using default engine renderer1.使用默认引擎渲染器#
The first variant is to render the central (primary) monitor by the default engine renderer.第一种变体是通过默认引擎渲染器渲染中央(主)监视器。
-
Enable two side (auxiliary) monitors via engine.surround.setEnabled(). All AppSurround monitors are disabled by default. The central one should be disabled, as it is drawn by the default engine renderer.通过engine.surround.setEnabled()启用两个侧面(辅助)监视器。默认情况下,所有AppSurround监视器都处于禁用状态。中央的那个应该被禁用,因为它是由默认引擎渲染器绘制的。
// 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);
-
Set projection and modelview matrices for side monitors via engine.surround.setProjection() and engine.surround.setModelview().通过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. Using AppSurround renderer2.使用AppSurround渲染器#
Another variant is to render the central monitor by the AppSurround renderer. This variant can be used, for example, if you want to set up symmetric frustums for all monitors.另一个变体是通过AppSurround渲染器渲染中央监视器。例如,如果要为所有监视器设置对称的视锥台,则可以使用此变体。
-
Disable rendering into the default UNIGINE viewport via engine.render.setEnabled():通过engine.render.setEnabled()禁用渲染到默认的UNIGINE视口:
engine.render.setEnabled(0);
-
Enable all three AppSurround monitors including the primary one. As a result, all three viewports will be rendered by AppSurround renderer itself:启用所有三个AppSurround监视器,包括主要的一个。结果,所有三个视口将由AppSurround渲染器本身渲染:
// Enable all three monitors: engine.surround.setEnabled(0,1); engine.surround.setEnabled(1,1); engine.surround.setEnabled(2,1);
-
Set modelview and projection matrices for all three monitors.为所有三个监视器设置模型视图和投影矩阵。
// 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);