Запуск графического интерфейса 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, но я понятия не имею, как можно это сделать.