Запуск графического интерфейса Qt в CryEngine 3

Я только начинаю работать с Qt и cryengine и хочу запустить приложение Qt GUI внутри cryengine. Я программирую с Visual Studio 2010 с помощью дополнения Qt. У меня есть и исходный код cryengine, и исходный код графического интерфейса пользователя Qt, которые я скомпилировал в одном решении. Однако я не уверен, как на самом деле запустить графический интерфейс Qt внутри кода.

Кто-нибудь может привести пример кода, который я мог бы использовать для запуска Qt GUI? И для ясности, мой проект Qt включает main.cpp, заголовок, другой.cpp и файл.ui. Могу ли я использовать какой-либо из них для запуска графического интерфейса или мне нужно запустить сам файл.exe, который создается при компиляции?

Спасибо

1 ответ

Если честно, я понятия не имею, как работает Qt; Но, предполагая, что Qt способен отрендерить изображение, вы можете использовать это, чтобы сделать это немного хакерским способом:

  • Подготовьте простой материал в редакторе песочницы (один слой материала, шейдер Illum, просто диффузная карта - любая)
  • Визуализируйте интерфейс Qt для изображения в памяти (по сути, просто массив / поток пикселей)
  • Передайте это изображение в CryEngine
  • В CryEngine найдите свой материал, клонируйте его и установите свое изображение в качестве диффузной карты.
  • Визуализируйте это прямо на экран

Вы можете даже эмулировать 3D-функциональность Scaleform, используя такой подход:

  • Создайте копию EntityFlashTag. Если вам нужен элемент 3D UI, вы можете:
  • Spawn и экземпляр вашей новой сущности
  • Настройте материал пользовательского интерфейса (с изображением визуализированного пользовательского интерфейса Qt) и примените его к экземпляру вашей сущности.
  • Масштабировать и корректировать положение объекта

Вы должны иметь возможность выполнять все связанные с CryEngine внутри GameDll, но, к сожалению, я не могу дать вам фрагменты кода прямо сейчас (возможно, сделаю это позже). Также у этого подхода есть один большой недостаток: вам придется реализовать все взаимодействие с пользовательским интерфейсом самостоятельно.


В противном случае, если вы хотите, чтобы пользовательский интерфейс Qt действительно находился выше CryEngine и имел "полный" исходный код CryEngine, вы можете разместить CryEngine внутри приложения Qt. Для этого подхода вам нужно будет создать виджет Qt, который будет действовать в качестве контейнера для CryEngine, и заставить этот виджет иметь собственный дескриптор (вы можете захотеть взглянуть на следующую ссылку для этого: заставить дочерний объект QWidget иметь собственный Ручка окна). Затем вы используете этот дескриптор при инициализации движка (для этого вам может понадобиться посмотреть код запуска из ПК, а также код, связанный с запуском игры, внутри GameDll). Имея это в виду, вы можете спроектировать оставшуюся часть пользовательского интерфейса выше виджета движка (для этого может быть достаточно просто добавить элементы без добавления их в макет - даже если вам придется размещать их вручную)


Возможно, все еще существует лучший подход, действительно "размещая" Qt внутри CryEngine, но я понятия не имею, как можно это сделать.

Другие вопросы по тегам