Russian Qt Forum
Ноябрь 01, 2024, 16:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGLWidget, QWindow, QGraphicsView - запутался в архитектуре :(  (Прочитано 5839 раз)
Disa
Гость
« : Декабрь 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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Декабрь 30, 2012, 23:18 »

Вопрос, который уже звучал у меня, но видимо я что-то не догоняю. Пока обертка QGLShaderProgram содержит загрузку из файла только для вершинного, фрагментного и геометрического шейдеров. То есть для тесселяции потребуется либо немного подождать, пока она не появиться, либо использовать другую обертку, либо наследовать QGLShaderProgram и добавлять руками загрузку.  
Неясно что Вы имеете ввиду под "тесселяцией"? Разбиение полигонов на более мелкие (триангуляция)? SDS?
В любом случае шейдеры к этому никакого отношения не имеют - они отвечают за шейдинг (т.е. производство пикселей). Один шейдер может применяться ко всей геометрии или к ее части - Вы решаете.
Записан
Disa
Гость
« Ответ #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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Декабрь 31, 2012, 01:19 »

Не думаю что "тесселяция" - такое уж общее понятие, оно всегда связано с какой-то конкретной задачей. Ну вот Ваш пример 14 (карта высоты). Построение модели гор решается без OpenGL, если адаптивность не требуется - пишется за день. Да, при смене resolution надо пересчитать модель, создать новые полигоны и вертексы. Да, будет пауза (доли секунды) - и что в этом страшного? Операция-то разовая.

Прошел по Вашей ссылке(ам) - не впечатляет, пока возможности довольно бедные (по сравнению с software). Скорость и использование GPU - дело хорошее, но здесь они особо не нужны. Конечно если пойти "на принцип" - типа "все только на OpenGL" - ну тогда да. А так эти заморочки себя не оправдывают (во всяком случае пока)
Записан
Disa
Гость
« Ответ #4 : Декабрь 31, 2012, 01:30 »

Так, еще небольшое уточнения. Все "современные свистелки" пока делаю чисто для себя, чтоб быть в тренде, так сказать. Ну то есть когда это понадобится, а я почти уверен что рано или поздно мне это понадобится, я мог бы сразу начать делать и сейчас я готов на изучение этого частично потратить свои выходные Улыбающийся

Ну в общем меня пока больше интересует вопрос, если ли "правильная тактика" прикручивания OpenGL API (последней версии, которая поддерживает карта и драйвера клиента) к Qt и как она должна выглядеть, как при этом правильно ограничивать или изменять функционал и прочее (ну пример, если есть тот же compute shader, то считать систему физику частиц на нем, если нет, то на CPU). Повторюсь, что цели сугубо учебные, но я думаю их можно рассматривать, как некие долгосрочные инвестиции.
« Последнее редактирование: Декабрь 31, 2012, 01:34 от Disa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Декабрь 31, 2012, 02:16 »

По поводу прикручивания все довольно очевидно. Если Вы не видите желанной тесселяции в доке Qt, то это практически гарантирует тернистый путь и уродливый велосипед.

Насчет "инвестиций" я Вас понял, но, на мой взгляд, вложение не очень удачное. Напр написав ту же карту высоты (в смысле построение модели) Вы приобретете намного больше знаний и, скажем так, "3D культуры" чем зазубривая вызовы OpenGL. Не стоит замыкаться в узком мирке "карта-драйвер"  Улыбающийся

Физика частиц - ну этого я не знаю. Если Вам там все ясно и надо уже выжимать скорость - может и есть смысл связываться с GPU. А иначе нет.
Записан
Disa
Гость
« Ответ #6 : Январь 02, 2013, 12:56 »

Я вас понял, спасибо и с наступившим Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Январь 02, 2013, 13:15 »

Я вас понял, спасибо и с наступившим Улыбающийся
Спасибо, и Вас также  Улыбающийся

Может лучше сказать так. Вы хотите иметь готовый, заряженный инструментарий - это нормальная, разумная идея. Но сказывается "нехватка задачи", получается "инструментарий для инструментария", и вытекающая из этого запутанность. Мне кажется лучший способ - написать простенькую задачку, и инструментарий будет выучен "сам собой"
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.