Вывод на 3 монитора с плагином AppSurround
Чтобы использовать этот функционал вам необходимо получить лицензию на
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.Минимум 3 видеовыхода одновременно на одной видеокарте или системе NVIDIA SLI.
- AMD Radeon HD 6000 Series or NVIDIA GeForce 600 Series GPU.Графический процессор серии AMD Radeon HD 6000 или NVIDIA GeForce 600.
See AlsoСмотрите также#
- engine.surround functionsФункции engine.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, нажмите кнопку AppSurround plugin на вкладке Plugin Samples.
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 Cameras#
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, используемые движком для просмотра сцены. Другие дисплеи представляют собой произвольные камеры с любой перспективой и смотрящими в любом направлении. Каждый дисплей имеет свои собственные матрицы modelview и проекции. При необходимости можно включать и отключать как основной, так и вспомогательный мониторы.
- 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.Каждый дисплей, включая основной, имеет свои собственные матрицы modelview и проекции.
- 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.По умолчанию только основной имеет интерфейс (графический интерфейс системы рендеринга, виджеты редактора, каркас или профилировщик). Однако отдельные Графические интерфейсы могут отображаться на всех мониторах.
- All viewports have their own viewport and Reflection mask to selectively render nodes and reflections from them.У всех вьюпортов есть свои вьюпорты и маска Reflection для выборочной визуализации узлов и отражений от них.
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:Чтобы реализовать пользовательскую конфигурацию камеры, закомментируйте wall.h в системном скрипте unigine.usc и оберните свой собственный код с помощью #ifdef HAS_APP_SURROUND ... #endif в функции render() системного скрипта:
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(). Установите матрицы проекции и modelview для боковых мониторов, используя 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():Отключите рендеринг в окне просмотра UNIGINE по умолчанию через engine.render.setEnabled():
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.Установите матрицы modelview и проекции для всех трех мониторов.
// 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);