В настоящее время я пишу игру на С++/Qt5 с помощью модуля Qt3D.
Я могу отобразить сцену (QGLSceneNodes) в QGLView, но теперь я застрял на , перекрасив сцену с некоторыми элементами GUI. Я еще не решил, использовать QML или С++ для определения внешнего вида интерфейса, поэтому я открыт для решений для обоих. (Обратите внимание, что модуль QML называется QtQuick3D, модуль С++ называется Qt3D, и они оба являются частью Qt5.)
Я очень предпочитаю решение на основе QML.
Как я могу сделать некоторую переоценку?
Следующие вещи должны быть возможны:
- Нарисуйте 2D-объекты (изображения) при заданных координатах экрана, конечно, с поддержкой альфа-каналов.
- Нарисуйте текст, используя системные шрифты, возможно, сначала покрасьте изображение и используя это как текстуру в контексте OpenGL Qt3D.
- Реакция на ввод мыши в координатах экрана (в отличие от выбора 3D-объектов).
Я думаю, что это все возможно, используя только другой QGLSceneNode для части 2D GUI. Но я считаю, что позиционирование и ориентация какой-либо сцены node для того, чтобы просто переориентироваться и повторно позиционироваться во время рендеринга (с использованием вершинного шейдера), не имеет смысла, вводит числовые ошибки и кажется неэффективным.
Правильно ли используется вершинный шейдер "GUI"?
(Как) я могу сделать эффекты пост-рендеринга и перерисовать работу вместе?
Было бы неплохо, если бы я мог сделать следующие эффекты после рендеринга:
- Прочитайте ранее визуализированную сцену, примените некоторые 2D-эффекты изображения (я могу представить, как реализовать их в качестве фрагментарного шейдера и визуализировать ранее обработанный буфер на последнем экране с использованием этого шейдера эффекта). Это позволяет мне сделать некоторые части графического интерфейса похожими на стекло с эффектом размытия.
- Некоторые более продвинутые эффекты могут сделать сцену более реалистичной: глубина и размытость изображения, завихрение жары, мерцание воздуха, эффекты свечения. Все они могут быть описаны с использованием фрагментарного шейдера (который не должен быть частью вопроса) и дополнительного буфера во время рендеринга. Они должны быть помещены между процессом рендеринга основного экрана и перерисованием графического интерфейса, поэтому я включил его в этот вопрос.
Я вижу проблему, когда я реализую переоценку с помощью специальной шейдерной программы: я не могу получить доступ к пикселям за графическим интерфейсом, чтобы применить некоторые эффекты, такие как gaussian blur, чтобы графический интерфейс выглядел как стекло. Мне пришлось бы отображать сцену в другой буфер вместо QGLView. Это моя главная проблема...