带AppWall插件的视频墙输出
AppWall应用程序旨在将Unigine世界渲染到可配置数量的窗口中。 AppWall监视器的数量不受限制。它们可以适合任何显示配置,并且可以在窗口模式和全屏模式下呈现。
开箱即用地支持以下显示配置(仅当显示器具有相同的分辨率时):
- 1个显示器(1×1)
- 一列中的2个监视器(1×2)
- 连续2个监视器(2×1)
- 连续3台显示器(3×1)
- 连续4个监视器(4×1)
- 连续5台显示器(5×1)
- 4台(2×2)
- 6台(3×2)
也可以看看#
启动AppWall#
如果您使用这些配置之一,则只需指定具有通常要求的插件库(lib/AppWall_*)启动参数(例如渲染API,窗口大小等)在启动器中。
main_x64 -extern_plugin AppWall
- UNIGINE引擎自动检测可用监视器的数量,并且如果它们符合任何受支持的配置,它将自动使用UNIGINE视口自动创建适当数量的窗口。
- 您可以使用该库的64位调试或发行版本。 (引擎会根据指定的主应用程序自动加载相应版本的库。)
不能将AppWall用于:
- 多显示器插件(AppSurround, AppProjection)
- 全景渲染
- 立体3D
2×2配置
|
4×1配置
|
如何设置Windows数量#
如果要手动设置AppWall窗口的数量并使用其他受支持的配置,除了通常需要的参数外,还需要指定两个特定的启动参数:
- width —设置水平行中的监视器数
- height —设置行数,即垂直列中有多少个监视器
例如,如果要在6个窗口中启动AppWall(2行监视器,每行3个监视器):
main_x64 -width 3 -height 2 -extern_plugin AppWall
不要忘记指定其他必填项启动参数也一样!
自定义AppWall#
可以轻松自定义AppWall以支持所需的监视器配置。您可以创建AppWall,以将UNIGINE视口渲染到任意数量的具有自定义查看视锥(对称或非对称视锥)的窗口中。
AppWall相机#
AppWall具有一个主视口,而所有其他视口则呈现为辅助视口。默认情况下,主显示是用于单显示器配置的UNIGINE引擎视口。它使用引擎使用的Player矩阵查看场景。其他显示器是具有任意角度并面向所需方向的任意摄像机。每个显示器都有自己的模型视图和投影矩阵。如果需要,可以启用或禁用主监视器和辅助监视器。
- 主要显示可以是放到任何监视器(对于支持的配置,已经设置)。
- 每个显示器都有自己的模型视图和投影矩阵。
- 默认情况下,只有主要的一个具有接口(渲染系统GUI,编辑器小部件,线框或分析器)。但是,分开图形用户界面可以在所有监视器上绘制(请参阅样本更多细节)。
- 所有视口都有自己的视口反射遮罩可选择性地渲染节点和来自节点的反射。
默认配置#
对于默认配置,主显示设置为以下监视器:
- 对于1×1配置,显示第一个(也是唯一一个)。
- 对于2×1配置,第一个显示。
- 对于3×1配置,第二个显示。
- 对于4×1配置,第二个显示。
- 对于5×1配置,则显示3。
- 对于1×2配置,该列中的第一个显示。
- 对于2×2配置,第一行显示在第一行。
- 对于3×2配置,第二行显示在第一行。
如何设置自定义相机配置#
AppWall视口的渲染由wall.h脚本(位于<UnigineSDK>/data/core/scripts/system中)控制。
要实现自定义摄像机配置,请在unigine.usc系统脚本中注释掉wall.h,然后在系统脚本的render()函数中将您的自定义代码与#ifdef HAS_APP_WALL ... #endif环绕在一起。
根据主要监视器的呈现方式,有两种可能的设置。可以通过以下方式得出:
- 默认引擎渲染器(与呈现通常的单窗口应用程序时相同)。
- AppWall渲染器本身(如果要对主监视器使用非对称视锥,并修改其模型视图矩阵,则更加安全)。
下面的示例演示如何创建3×1监视器配置以及如何为主监视器选择渲染器。
1.使用默认引擎渲染器#
第一种变体是通过默认引擎渲染器渲染主监视器。
-
如果默认情况下不支持创建的配置,请通过Unigine::Plugins::AppWall:setPrimary()设置主监视器:
// The primary display is the 2nd one in a row and // it is positioned in the first line of monitors. Unigine::Plugins::AppWall::get()->setPrimary(1, 0);
-
通过Unigine::Plugins::AppWall::setEnabled()启用所有辅助监视器(默认情况下禁用它们)。主菜单应被禁用,因为它是由默认引擎渲染器绘制的。
// Enable the 1st and the 3rd monitors in the first row. // The third argument of the function sets 'enabled' flag. Unigine::Plugins::AppWall::get()->setEnabled(0, 0, 1); Unigine::Plugins::AppWall::get()->setEnabled(2, 0, 1);
-
通过Unigine::Plugins::AppWall::setProjection()和Unigine::Plugins::AppWall::setModelview()设置辅助监视器的投影和模型视图矩阵。
// Settings for the 1st monitor Unigine::Plugins::AppWall::get()->setProjection(0, 0, projection_0); Unigine::Plugins::AppWall::get()->setModelview(0, 0, modelview_0); // Settings for the 3rd monitor Unigine::Plugins::AppWall::get()->setProjection(2, 0, projection_1); Unigine::Plugins::AppWall::get()->setModelview(2, 0, modelview_1);
2.使用AppWall渲染器#
另一个变体是通过AppWall渲染器渲染主监视器。例如,如果要为所有监视器设置对称的视锥台,则可以使用此变体。
-
通过Unigine::Render::setEnabled()禁用渲染到默认的UNIGINE视口:
Unigine::Render::setEnabled(0);
-
启用所有AppWall监视器,包括主要的监视器。结果,所有三个视口将由AppWall渲染器本身渲染:
// Enable all AppWall monitors: Unigine::Plugins::AppWall::get()->setEnabled(0, 0, 1); Unigine::Plugins::AppWall::get()->setEnabled(1, 0, 1); Unigine::Plugins::AppWall::get()->setEnabled(2, 0, 1);
-
设置所有三个监视器的模型视图和投影矩阵。
// Settings for the 1st monitor Unigine::Plugins::AppWall::get()->setProjection(0, 0, projection_0); Unigine::Plugins::AppWall::get()->setModelview(0, 0, modelview_0); // Settings for the 2nd (primary) monitor Unigine::Plugins::AppWall::get()->setProjection(1, 0, projection_1); Unigine::Plugins::AppWall::get()->setModelview(1, 0, modelview_1); // Settings for the 3rd monitor Unigine::Plugins::AppWall::get()->setProjection(2, 0, projection_2); Unigine::Plugins::AppWall::get()->setModelview(2, 0, modelview_2);