Мультимониторное 3D приложение - PullRequest
8 голосов
/ 08 января 2010

Передо мной был задан проект приложения C ++ 3D, в котором будут использоваться 3 дисплея, каждый из которых отображается с другой камеры.

Недавно я узнал об Ogre3D, но не ясно, поддерживает ли он вывод с разных камерна разные дисплеи / графические процессоры.

Есть ли у кого-нибудь опыт работы с подобными программами установки и Ogre или другим движком?

Ответы [ 2 ]

3 голосов
/ 08 января 2010

В отношении OGRE3D можно сказать несколько слов о поддержке нескольких головок. По моему опыту, рабочим решением является использование исходной версии Ogre 1.6.1 и применение этого патча . С помощью этого патча пользователям удалось отобразить приложение Ogre в конфигурации 6 мониторов .

Personnaly, я успешно применил этот патч и использовал его с плагином StereoManager для подключения приложений Ogre к 3D-проектору. Я использовал только бэкэнд Direct3D9. Плагин StereoManager поставляется с модифицированной демонстрацией (Fresnel_Demo), которая может помочь вам настроить ваше первое многоголовное приложение.

Я должен также добавить, что многоголовый патч теперь является частью ядра Ogre, начиная с версии 1.7. Ogre1.7 был недавно выпущен как RC1, так что это может быть самый быстрый и простой способ заставить его работать.

3 голосов
/ 08 января 2010

По крайней мере, в большинстве систем (например, Windows, MacOS) система управления окнами создает виртуальный рабочий стол с различными мониторами, сопоставленными с различными частями рабочего стола. Если вы хотите, вы можете (например) создать одно большое окно, которое будет охватывать все три дисплея. Если вы установите это окно для использования OpenGL, почти все, что использует OpenGL (почти наверняка, включая Ogre3D), будет работать просто отлично, хотя в некоторых случаях получение такого большого выходного разрешения может обременять видеокарту до такой степени, что она немного медленнее, чем обычно .

Если вы хотите иметь дело с отдельным окном на каждом дисплее, все может быть немного сложнее. Сам OpenGL не (даже не пытается) определить, как обрабатывать отображение в нескольких окнах - это зависит от набора функций для конкретной платформы. Например, в Windows у вас есть контекст рендеринга для каждого окна, и вы должны использовать WGLMakeCurrent, чтобы выбрать, какой контекст рендеринга вы рисуете в любой момент времени.

Если память служит, порт Windows Ogre3D поддерживает несколько контекстов рендеринга, поэтому это также не должно быть проблемой. Я ожидаю, что он может работать с несколькими окнами и в других системах, но я не использовал его ни в каких других системах, поэтому не могу сказать с уверенностью.

Однако я сразу предполагаю, что поддержка трех мониторов будет почти несущественной в ваших общих усилиях по разработке. Конечно, это означает , что вы (можете сказать своему боссу) нуждаетесь в тройной настройке монитора для разработки и тестирования, что, безусловно, не так уж и плохо! : -)

Редактировать: сам OpenGL не указывает ничего о полноэкранных окнах по сравнению с обычными окнами. Если память используется, по крайней мере, в Windows, чтобы получить полноэкранное приложение, вы используете ChangeDisplaySettings с CDS_FULLSCREEEN. После этого он обрабатывает практически весь виртуальный рабочий стол как единое окно. Я не помню, чтобы это делалось с несколькими мониторами, поэтому я не могу сказать много с большой уверенностью.

...