Russian Qt Forum
Ноябрь 01, 2024, 16:38
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :( (Прочитано 5843 раз)
Disa
Гость
QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
:
Декабрь 30, 2012, 22:17 »
Добрый вечер и с наступающими праздниками вас!
Раньше все делал просто, по шаблону - наследовал свою сцену от QGLWidget, дальше пихал нужные картинки либо в VBO, либо в VAO + делаем нужное количество шейдеров и рисуем.
Соответственно в конструктор передавал нужный тип формата OpenGL.
Потом (уже писал в теме) увидел, что зачем-то нужно (или можно) отрисовывать QGLWidget внутри класса QGraphicsView.
Сейчас, посмотрев
видео
, понял, что там все еще хитрее. Теперь наследуем класс от QWindow, в нем отдельная инициализация с заданием QSurfaceFormat, после чего делаем некую абстрактную сцену и рисуем ее.
Так же (видимо из-за пробелов в знании) заметил что существуют обертка для VBO и других буферных объектов в Qt (QGLBuffer)
Вопрос, который уже звучал у меня, но видимо я что-то не догоняю. Пока обертка QGLShaderProgram содержит загрузку из файла только для вершинного, фрагментного и геометрического шейдеров. То есть для тесселяции потребуется либо немного подождать, пока она не появиться, либо использовать другую обертку, либо наследовать QGLShaderProgram и добавлять руками загрузку.
Так как нужно сделать, чтоб:
1). не изобрести велосипед
2). сделать не слишком ужасные классы состоящии из набора разношерстных оберток
3). использовать все возможности OpenGL 4.2 (ну или хотя бы 4.0-4.1). Точнее речь идет о тесселяции и совсем уже хорошо, если можно будет поиграться с compute shaders.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
Ответ #1 :
Декабрь 30, 2012, 23:18 »
Цитата: Disa от Декабрь 30, 2012, 22:17
Вопрос, который уже звучал у меня, но видимо я что-то не догоняю. Пока обертка QGLShaderProgram содержит загрузку из файла только для вершинного, фрагментного и геометрического шейдеров. То есть для тесселяции потребуется либо немного подождать, пока она не появиться, либо использовать другую обертку, либо наследовать QGLShaderProgram и добавлять руками загрузку.
Неясно что Вы имеете ввиду под "тесселяцией"? Разбиение полигонов на более мелкие (триангуляция)? SDS?
В любом случае шейдеры к этому никакого отношения не имеют - они отвечают за шейдинг (т.е. производство пикселей). Один шейдер может применяться ко всей геометрии или к ее части - Вы решаете.
Записан
Disa
Гость
Re: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
Ответ #2 :
Декабрь 31, 2012, 00:43 »
Да, извините, уточню - генерация относительно большого количества вершин на GPU (например 14 отсюда
http://nopper.tv/opengl.html
).
Цитировать
Однако, хотя добавление геометрических шейдеров в OpenGL 3.2 и повысило гибкость конвейера рендеринга, но при этом оказалось, что геометрические шейдеры очень плохо подходят для генерации на GPU большого количества геометрии. Поэтому в архитектуру GPU следующего поколения (для NVidia - это Fermi) была добавлена аппаратная поддержка тесселляции, позволяющая прямо на GPU на основе одного примитива создавать большое количество новых примитивов.
Источник:
http://steps3d.narod.ru/tutorials/tesselation-tutorial.html
Внизу статьи приведены алгоритмы аппаратной тесселяции.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
Ответ #3 :
Декабрь 31, 2012, 01:19 »
Не думаю что "тесселяция" - такое уж общее понятие, оно всегда связано с какой-то конкретной задачей. Ну вот Ваш пример 14 (карта высоты). Построение модели гор решается без OpenGL, если адаптивность не требуется - пишется за день. Да, при смене resolution надо пересчитать модель, создать новые полигоны и вертексы. Да, будет пауза (доли секунды) - и что в этом страшного? Операция-то разовая.
Прошел по Вашей ссылке(ам) - не впечатляет, пока возможности довольно бедные (по сравнению с software). Скорость и использование GPU - дело хорошее, но здесь они особо не нужны. Конечно если пойти "на принцип" - типа "все только на OpenGL" - ну тогда да. А так эти заморочки себя не оправдывают (во всяком случае пока)
Записан
Disa
Гость
Re: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
Ответ #4 :
Декабрь 31, 2012, 01:30 »
Так, еще небольшое уточнения. Все "современные свистелки" пока делаю чисто для себя, чтоб быть в тренде, так сказать. Ну то есть когда это понадобится, а я почти уверен что рано или поздно мне это понадобится, я мог бы сразу начать делать и сейчас я готов на изучение этого частично потратить свои выходные
Ну в общем меня пока больше интересует вопрос, если ли "правильная тактика" прикручивания OpenGL API (последней версии, которая поддерживает карта и драйвера клиента) к Qt и как она должна выглядеть, как при этом правильно ограничивать или изменять функционал и прочее (ну пример, если есть тот же compute shader, то считать систему физику частиц на нем, если нет, то на CPU). Повторюсь, что цели сугубо учебные, но я думаю их можно рассматривать, как некие долгосрочные инвестиции.
«
Последнее редактирование: Декабрь 31, 2012, 01:34 от Disa
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
Ответ #5 :
Декабрь 31, 2012, 02:16 »
По поводу прикручивания все довольно очевидно. Если Вы не видите желанной тесселяции в доке Qt, то это практически гарантирует тернистый путь и уродливый велосипед.
Насчет "инвестиций" я Вас понял, но, на мой взгляд, вложение не очень удачное. Напр написав ту же карту высоты (в смысле построение модели) Вы приобретете намного больше знаний и, скажем так, "3D культуры" чем зазубривая вызовы OpenGL. Не стоит замыкаться в узком мирке "карта-драйвер"
Физика частиц - ну этого я не знаю. Если Вам там все ясно и надо уже выжимать скорость - может и есть смысл связываться с GPU. А иначе нет.
Записан
Disa
Гость
Re: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
Ответ #6 :
Январь 02, 2013, 12:56 »
Я вас понял, спасибо и с наступившим
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(
«
Ответ #7 :
Январь 02, 2013, 13:15 »
Цитата: Disa от Январь 02, 2013, 12:56
Я вас понял, спасибо и с наступившим
Спасибо, и Вас также
Может лучше сказать так. Вы хотите иметь готовый, заряженный инструментарий - это нормальная, разумная идея. Но сказывается "нехватка задачи", получается "инструментарий для инструментария", и вытекающая из этого запутанность. Мне кажется лучший способ - написать простенькую задачку, и инструментарий будет выучен "сам собой"
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...