Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > OpenGL 3 4 в QT но средсвами


Автор: Vetos 22.11.2011, 00:16
я хочу использовать от QT только оболочку, т.е. окно (со всеми обработчиками и так далее).
Хочу использовать OpenGL с библитекой Gle. QT оборачивает как основные функции так и расширения ОГЛ, а  я гдето в помощи читал что подключение Gle(ну того что Glew для винды) не приветсвуется и ошибки будут сыпаться пачками.
Вот хочу спросить наперед у опытных программеров, возможен ли такой гибридный подход, либо используй OpenGL в QT, либо не используй QT вообще? 
Хотелось просто потом портироваться на мобильник, а конкретно рыться в симбиане неохото(первая попытка неудалась), а через QT все доступно.

Автор: alexvs11 22.11.2011, 01:02
я пытался отрисовывать на Qt'шном окне DirectX'ом - и скажу, что если это и возможно, то результат зависит от версии библиотеки и скрытых внутренних механизмов
Qt использует свой стек рендеринга, думаю встраиваться в него не самая удачная идея

Автор: bsa 22.11.2011, 10:36
Vetos, нет никаких проблем, кроме криво реализованных хидеров в gle. Таким образом, если ты ОЧЕНЬ хочешь ее использовать, то делай отдельный модуль (читай *.cpp файл), который будет с ней работать, но не будет подключать хидеры QtOpenGL.
На сколько я помню, gle просто открывает все возможное функции OpenGL (читай расширения), а не только те, что открыты по умолчанию.
Если ты хочешь потом портировать на мобильник, то следует сразу ознакомиться с GLES (кажется как). Чтобы потом не было мучительно больно.
Цитата(alexvs11)
я пытался отрисовывать на Qt'шном окне DirectX'ом - и скажу, что если это и возможно, то результат зависит от версии библиотеки и скрытых внутренних механизмов
А тебе кто-нибудь обещал поддержку DirectX в Qt? Qt позиционируется как кроссплатформенная библиотека. А DirectX (в отличие от OpenGL) есть только на 2-х платформах: Windows и XBox.
Вот что делают энтузиасты: http://prog.org.ru/wiki/index.php?title=QDirect3DWidget.

Автор: alexvs11 22.11.2011, 13:13
Цитата(bsa @  22.11.2011,  10:36 Найти цитируемый пост)
А тебе кто-нибудь обещал поддержку DirectX в Qt? Qt позиционируется как кроссплатформенная библиотека. А DirectX (в отличие от OpenGL) есть только на 2-х платформах: Windows и XBox.

а ктото обещал нативную работу с opengl?
речь идет о том, чтобы использовать окна Qt для отрисовки
на винде например можно было получить hwnd окна и попытаться рисовать на нем
собственно речь о том, что Qt не позволял завладеть отрисовкой окна по простому
и тут нет разницы чем отрисовывать, directx или opengl

Автор: bsa 22.11.2011, 13:26
Цитата(alexvs11 @  22.11.2011,  14:13 Найти цитируемый пост)
а ктото обещал нативную работу с opengl?

а если http://doc.qt.nokia.com/4.7/qglwidget.html почитать?
Цитата
The QGLWidget class is a widget for rendering OpenGL graphics.
QGLWidget provides functionality for displaying OpenGL graphics integrated into a Qt application. It is very simple to use. You inherit from it and use the subclass like any other QWidget, except that you have the choice between using QPainter and standard OpenGL rendering commands.

Автор: alexvs11 22.11.2011, 13:48
bsa, а если пост автора почитать?
из него следует, что автор собирается использовать opengl не через обертки Qt, а через нативную библиотеку

Автор: bsa 22.11.2011, 13:57
alexvs11, ты видимо документацию так и не прочитал... Или не понял... Или не захотел понять...
Для тех кто в танке:
QGLWidget создает контекст OpenGL, который необходим для отрисовки сцены с использованием данной библиотеки. Далее у тебя есть возможность использовать средства QPainter или OpenGL для отрисовки. Выбор остается за тобой. Чтобы тебе было удобней, создано несколько виртуальных методов, которые вызываются при инициализации контекста для его настройки, изменении размера виджета (для настройки вьюпорта, например), а так же paintGL для отрисовки сцены.

Автор: alexvs11 22.11.2011, 20:42
bsa, ок, победили
об таком использовании я не знал

Автор: bsa 22.11.2011, 21:46
Цитата(alexvs11 @  22.11.2011,  21:42 Найти цитируемый пост)
об таком использовании я не знал

Именно поэтому я и отослал к документации. Рекомендую в следующий раз не брезговать и читать ее, когда возникает спор.  smile 

Автор: Vetos 23.11.2011, 00:17
Спасибо за ответы!


Цитата(bsa @  22.11.2011,  10:36 Найти цитируемый пост)
Vetos, нет никаких проблем, кроме криво реализованных хидеров в gle. Таким образом, если ты ОЧЕНЬ хочешь ее использовать, то делай отдельный модуль (читай *.cpp файл), который будет с ней работать, но не будет подключать хидеры QtOpenGL.


Т.е. я просто создаю класс который будет рисовать что мне нужно, командами поднятыми Gle, сразу на окне QT с поднятым контекстом?
Или же создавать контекст прийдется вручную без QGLWidget?
 
Цитата(bsa @  22.11.2011,  10:36 Найти цитируемый пост)
Если ты хочешь потом портировать на мобильник, то следует сразу ознакомиться с GLES


моб тянет OGL ES 2.0, для моего уровня особых отличий небудет, просто вдальнейшем хотелось поковырять библиотеку для десктопов

Цитата(bsa @  22.11.2011,  13:57 Найти цитируемый пост)
Для тех кто в танке:QGLWidget создает контекст OpenGL, который необходим для отрисовки сцены с использованием данной библиотеки.


Так получается что всетаки GLWidget может использоваться только встроенными функциями? Или всетаки возможен вариант использования контекста GLWidget?

Впринцыпе начну я знакомиться с функциональносттью QT по отношению к GL, всеравно и так и так прийдется его использовать для мобилки. Но всеже если какието приемлемые варианты известны прошу помощи. Для начала попробую перенести уроки gl33lessons на QT, если QT поддерживает весь функционал уроков, то впринципе на первых порах мне будет достаточно. И всетаки идея с гибридным использованием не покидает мою голову. Я просто гдето на nokia.com читал что QT не поддерживает OpenGL на 100%, может это какието старые странички, может в 4.7.4 версии уже все реализовано???

Автор: bsa 23.11.2011, 10:18
Цитата(Vetos @  23.11.2011,  01:17 Найти цитируемый пост)
Т.е. я просто создаю класс который будет рисовать что мне нужно, командами поднятыми Gle, сразу на окне QT с поднятым контекстом?
Класс или просто функцию - не важно. Можешь сделать класс и потом его использовать в качестве второго предка для твоего виджета (первый предок должен быть QGLWidget или его потомок).
Цитата(Vetos @  23.11.2011,  01:17 Найти цитируемый пост)
Или же создавать контекст прийдется вручную без QGLWidget?
Зачем? QGLWidget позволяет тебе встраивать OpenGL сцену в интерфейс приложения. Зачем отказываться от такой возможности?
Цитата(Vetos @  23.11.2011,  01:17 Найти цитируемый пост)
Так получается что всетаки GLWidget может использоваться только встроенными функциями? Или всетаки возможен вариант использования контекста GLWidget?
Под "данной библиотекой" я имел в виду OpenGL. Не обязательно пользоваться средствами QPainter. Можешь напрямую использовать OpenGL - QGLWidget создаст тебе необходимые комфортные условия.
Цитата(Vetos @  23.11.2011,  01:17 Найти цитируемый пост)
Я просто гдето на nokia.com читал что QT не поддерживает OpenGL на 100%, может это какието старые странички, может в 4.7.4 версии уже все реализовано???
Подозреваю, что ты просто не так понял. Qt (именно t маленькая, так как QT == QuickTime) действительно содержит ряд элементов, которые упрощают работу (читай скрывают) с OpenGL (см. модуль QtOpenGL). Но если ты собираешься использовать OpenGL напрямую, то Qt тебе создаст контекст (просто для разных ОС это делается по разному, а у Qt единый интерфейс) и даст три виртуальные функции, которые позволят не заморачиваться с интеграцией в интерфейс. Дальше - используй что хочешь или OpenGL (кроме некоторых функций glut, которые дублируют функционал Qt).
Цитата(Vetos @  23.11.2011,  01:17 Найти цитируемый пост)
Для начала попробую перенести уроки gl33lessons на QT, если QT поддерживает весь функционал уроков, то впринципе на первых порах мне будет достаточно.

Эти примеры придется немного отредактировать. В частности, убрать создание контекста (это QGLWidget сделает за тебя) и разнести код по трем виртуальным функциям. Это не сложно.

Автор: Vetos 23.11.2011, 22:50
Спасибо
Цитата(bsa @  23.11.2011,  10:18 Найти цитируемый пост)
QGLWidget позволяет тебе встраивать OpenGL сцену в интерфейс приложения. Зачем отказываться от такой возможности?


вот и я думаю, богатый функционал Qt уже состовляет пол движка, и скрипты и сеть, и т.д.
Буду изучать (Ужеб давно пора бы) smile  

Если комуто понадобится то полная поддержка версий OpenGL свыше 3.1 есть только в версии Qt 4.8.0 ( сам пользуюсь версией Qt 4.8.0 RC )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)