Визуализация QWidget в OpenGL

У меня есть приложение OpenGL, и я хотел бы добавить к нему графический интерфейс.

Моя проблема в том, что я хочу сохранить свой способ создания окна и моей основной петли. На самом деле, я хочу сохранить свое приложение и просто добавить несколько виджетов для взаимодействия со сценой …

Я знаю, что мы можем использовать OpenGL в качестве средства визуализации, перегружая QApplication, но он создает окно и создает другой контекст OpenGL, который мне не нужен … Я знаю, что я могу использовать QGLWidget для рендеринга сцены OpenGL в него, но это не так подходит то, что я тоже хочу …

Я искал на многих форумах, не найдя решения. Я хочу знать, возможно ли это, и если да, как это сделать?

Если это невозможно сделать, есть ли способ сделать это? Кажется, что CEGUI может это сделать, но, на мой взгляд, это немного молодо, нет?

1

Решение

Моя проблема в том, что я хочу сохранить свой способ создания окна и моей основной петли.

Чтобы использовать систему виджетов Qt, вы должны использовать QApplication и систему событий, которую она породила. У вас не может быть двух циклов событий, сражающихся между одними и теми же ресурсами (окнами, пользовательским вводом, приемом и доставкой сигналов).

На самом деле, я хочу сохранить свое приложение и просто добавить несколько виджетов для взаимодействия со сценой …

Затем к вам обращается красивая песня Rolling Stones: «Вы не всегда можете получить то, что хотите …»

BTW? Как вы создаете окно прямо сейчас? GLUT? Затем производный от QGLWidget и переопределяющий его resizeGL, paintGL а также timerEvent с таймером задержки 0, чтобы удвоить время простоя и mouse*Event методы приведут вас к тому же поведению, что и GLUT.

Вы можете обнаружить, что фреймворк и система событий Qt — это то, что вам нужно.

1

Другие решения

Ты пробовал hello-gl пример? Он имеет очень хороший и чистый код для рендеринга OpenGL и других базовых операций (изменение размера, зацикливание, просмотр). Если у вас проблемы с GLUT, просто добавьте glutInit(&argc,argv); сразу после int main(),

0

По вопросам рекламы [email protected]