Russian Qt Forum
Ноябрь 22, 2024, 16:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Архитектура VBO
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Архитектура VBO (Прочитано 17859 раз)
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Архитектура VBO
«
Ответ #15 :
Февраль 01, 2016, 12:39 »
Цитата: Igors от Февраль 01, 2016, 12:03
Сколько вертексов имеет простейший кубик? Человек знакомый с OpenGL ответит 24 (а не 8 как начинающий).
Сам по себе кубик имеет 8 вертексов, остальное - это представление модели, которая визуализируется. Зависит от того, как рисовать. Если квадами - то 24, если треугольниками - то, считаем, 36 (по 6 точек на грань, если без стрипов). А если индексами, то зададите вы все те же 8 вертексов, плюс массивы индексов.
Как я понимаю, вы рисуете квадами. Понятно, что для различных методов шейдинга вам нужно различное представление модели визулизации. Но количество вертексов то у вас не изменяется. Задавайте вертексы отдельным массивом, и отдельными массивами - нормали для каждого из режимов. При отрисовке будете между ними переключаться. Если критичен расход памяти - то массивы нормалей придется перегенерировать заново.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Архитектура VBO
«
Ответ #16 :
Февраль 01, 2016, 13:28 »
Цитата: Racheengel от Февраль 01, 2016, 12:39
Зависит от того, как рисовать. Если квадами - то 24, если треугольниками - то, считаем, 36 (по 6 точек на грань, если без стрипов). А если индексами, то зададите вы все те же 8 вертексов, плюс массивы индексов.
Кубик из тр-ков имеет 12 фейсов и те же самые 24 вертекса. Тут уже одни вертексы шарятся, другие нет. Просто берем квады и каждый бьем на 2 тр-ка, никакие новые вертексы не нужны. Создать 36 можно но бессмысленно.
Цитата: Racheengel от Февраль 01, 2016, 12:39
Сам по себе кубик имеет 8 вертексов, остальное - это представление модели, которая визуализируется.
Рендерится конкретное представление, а не что там "само по себе/существу"
Цитата: Racheengel от Февраль 01, 2016, 12:39
Но количество вертексов то у вас не изменяется.
Для кубика нет, у него и так все "расщарено", а в общем случае меняется (аттач)
Что ж так плаваете в азах? Это же на уровне "популярных знаний"
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Архитектура VBO
«
Ответ #17 :
Февраль 01, 2016, 14:05 »
Цитата: Igors от Февраль 01, 2016, 13:28
Для кубика нет, у него и так все "расщарено", а в общем случае меняется (аттач)
Так я про это и спрашивал - что меняется для каждого из представлений?
Ну, теперь понятно, что "меняется все" - и нормали, и полигоны.
Т.е. есть варианты с различной детализацией.
О каких объемах данных идет речь? Играет ли роль скорость визуализации? Ну т.е. это live preview или пользователю пара секунд не критична при свитче отображений?
В общем случае вам все равно нужно для каждого случая генерировать разные данные. Вопрос только в том, чем мы будем жертвовать - памятью или производительностью?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Архитектура VBO
«
Ответ #18 :
Февраль 01, 2016, 14:53 »
Цитата: Racheengel от Февраль 01, 2016, 14:05
Так я про это и спрашивал - что меняется для каждого из представлений?
Ну, теперь понятно, что "меняется все" - и нормали, и полигоны.
Полигоны никто не трогал, меняются только нормали. Оба варианта нормалей у меня в памяти всегда есть, они по-любому нужны. Но с гребаным OpenGL мне никак не удается просто "заменить нормали".
Цитата: Racheengel от Февраль 01, 2016, 14:05
О каких объемах данных идет речь? Играет ли роль скорость визуализации? Ну т.е. это live preview или пользователю пара секунд не критична при свитче отображений?
В общем случае вам все равно нужно для каждого случая генерировать разные данные. Вопрос только в том, чем мы будем жертвовать - памятью или производительностью?
Это все рассказано в первом же посте. Интересует решение без жертв, или, на худой конец, доказательство невозможности такового.
[OFF]К сожалению, Вы взяли на вооружение стиль
Верес
'а, по-простому говоря "на шару".
Цитировать
Напишу-ка так. Не, я конечно не уверен, да и занимался этим немного и хз когда. Ну а вдруг прокатит? А если нет - не беда, вот мне и растолкуют почему. Так я и буду получать знания через ля-ля на форуме, без всяких усилий.
Это не очень корректно по отношению к ТС - мне нетрудно разжевать, но не для чисто праздного любопытства. А главное - минимум 5-летний опыт
Верес
'а показывает что такой метод ничего не дает. Результаты ужасны, причем все хуже и хуже
[/OFF]
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Архитектура VBO
«
Ответ #19 :
Февраль 01, 2016, 15:51 »
Цитата: Igors от Февраль 01, 2016, 14:53
Полигоны никто не трогал, меняются только нормали. Оба варианта нормалей у меня в памяти всегда есть, они по-любому нужны. Но с гребаным OpenGL мне никак не удается просто "заменить нормали".
У Вас на скриншоте 2 модели шара - высокополигональная слева и низкополигональная справа.
Каким образом тогда Ваша цитата связана с Вашим скриншотом?
Они взаимоисключающие.
Либо Вы делаете higl-poly & low-poly model для разных случаев (естественно, и нормали в этом случае разные)...
Либо, если меняются ТОЛЬКО нормали - то рисуйте через glDraw[Arrays|Elements], тогда у Вас будет возможность безболезненно переключаться между массивами нормалей
Оффтоп: а при чем тут Верес и его стиль
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Архитектура VBO
«
Ответ #20 :
Февраль 01, 2016, 16:06 »
Racheengel, в обоих вариантах одинаковое количество полигонов. Меняются только нормали. Это обман зрения.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Архитектура VBO
«
Ответ #21 :
Февраль 01, 2016, 16:29 »
Цитата: __Heaven__ от Февраль 01, 2016, 16:06
Racheengel, в обоих вариантах одинаковое количество полигонов. Меняются только нормали. Это обман зрения.
Да, но:
Цитировать
Но появилась новая фича - пользователь хочет иметь возможность показа измельченной (грубо говоря триангулированной) модели
Я так понимаю, что тут не только в нормалях разница, а имеется в виду высокополигональная модель, которую Игорь не хочет хранить в памяти, а хочет запузырить на видеокарту через VBO
Или опять не так?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Архитектура VBO
«
Ответ #22 :
Февраль 02, 2016, 10:51 »
Цитата: Racheengel от Февраль 01, 2016, 15:51
Либо, если меняются ТОЛЬКО нормали - то рисуйте через glDraw[Arrays|Elements], тогда у Вас будет возможность безболезненно переключаться между массивами нормалей
2 полигона модели сферы что выше
1-й ссылается на вертексы (0, 1, 2, 3)
2-й ссылается на вертексы (4, 5, 1, 0) // т.е. вертексы 0 и 1 шарятся этими полигонами
Все вертексы имеют нормали для левой картинки выше. Также меня есть предвычисленные нормали для обоих полигонов. Ну и как я их "подменю"?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Архитектура VBO
«
Ответ #23 :
Февраль 02, 2016, 13:19 »
А как Вы нормали для каждой из сфер храните?
Я бы ожидал массивы такой же длины, как и для вертексов, с 4 нормалями на полигон.
Т.е. для варианта 1 было бы:
V = [v0, v1, v2, v3] [v4, v5, v1, v0]
N1 = [n0, n1, n2, n3] [n4, n5, n6, n7]
А для варианта 2:
V = [v0, v1, v2, v3] [v4, v5, v1, v0]
N2 = [m0, m1, m2, m3] [m4, m5, m6, m7]
где n - нормали, рассчитанные для "модели 1", а m - нормали, рассчитанные для "модели 2".
Далее с помощью glNormalPointer(N1) или glNormalPointer(N2) переключаетесь между ними.
Надеюсь, написал понятно (Вы же используете glNormalPointer и glVertexPointer в коде?)
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Архитектура VBO
«
Ответ #24 :
Февраль 02, 2016, 13:35 »
Цитата: Racheengel от Февраль 02, 2016, 13:19
Вы же используете glNormalPointer и glVertexPointer в коде?
Вот как раз для них и не выходит
Цитата: Racheengel от Февраль 02, 2016, 13:19
А для варианта 2:
V = [v0, v1, v2, v3] [v4, v5, v1, v0]
N2 = [m0, m1, m2, m3] [m4, m5, m6, m7]
Счетчики V и N(N2) должны быть одинаковы. Если 6 вертексов (v0..v5) то и нормалей будет использоваться 6 (а не 8 ). И если подаются одни и те же индексы v0, v1 для 2 полигонов, то и нормали будут юзаться одни и те же. Др словами у OpenGL ОДЫН индекс на все - про все.
Пробовали учить человека играть в преферанс "на практике"?
Цитировать
.. а самая старшая черва ?
.. а 6 пик - вистовать обязательно ?
.. а мизер - это когда не брать взяток?
...
...
Как это ужасно
«
Последнее редактирование: Февраль 02, 2016, 13:37 от Igors
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Архитектура VBO
«
Ответ #25 :
Февраль 02, 2016, 13:54 »
Ок. Вроде я понял проблему. Похоже, ничего не остается, как дублировать вертексы. Имхо всяко лучше, чем тормозные glBegin/glEnd. Да, с одной стороны возрастет расход памяти на координаты вертексов, но с другой Вы можете тогда отказаться от массива индексов и использовать glDrawArrays.
Возможно, извращениями с шейдерами можно добиться лучших результатов, но тут я не советчик. Не юзал шейдеры ни разу.
Но Вы так и не сказали, о каких объемах данных идет речь, насколько велики модели? Иногда лучше пожертвовать памятью ради производительности, перейти на 64-бит архитектуру, например.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Архитектура VBO
«
Ответ #26 :
Февраль 02, 2016, 14:07 »
Я дополню. Если использовать буферы, то жертвовать придётся памятью GPU. Тем самым можно освободить ОЗУ.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Архитектура VBO
«
Ответ #27 :
Февраль 02, 2016, 15:11 »
Цитата: Racheengel от Февраль 02, 2016, 13:54
Похоже, ничего не остается, как дублировать вертексы...
Ну как-то Ваш вывод не блещет оригинальностью и/или свежими идеями
И кроме банального "альтернатива скорость - расход памяти" напомню еще фактор "объем кода". Паршивенький glBegin/glEnd = один маленький метод, а вот "еще одно представление данных" - ой нет
Цитата: Racheengel от Февраль 02, 2016, 13:54
Но Вы так и не сказали, о каких объемах данных идет речь,
"Общий случай" - юзер решает какие модели грузить и сколько. В общем мульены - дело давно рядовое.
Цитата: Racheengel от Февраль 02, 2016, 13:54
Возможно, извращениями с шейдерами можно добиться лучших результатов, но тут я не советчик. Не юзал шейдеры ни разу.
В шейдере заставить использовать фейсетную нормаль - неск строк (если не одна). Но тут есть страшное НО - я не могу ограничиться только этим. Связавшись с фрагментным шейдером я должен выполнить ВСЕ операции (найти и отмапить все текстуры, обсчитать все источники света и.т.п.) и в конце-концов выдать на гора цвет (суб)пикселя. Др словами нормальной pipeline эта железяка не имеет, можно только перекрыть шейдинг целиком. Спрашивал на др форумах можно ли как-то найти дырочку чтобы туда вклиниться - ну пока без успеха
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Архитектура VBO
«
Ответ #28 :
Февраль 02, 2016, 15:22 »
Цитата: __Heaven__ от Февраль 02, 2016, 14:07
Я дополню. Если использовать буферы, то жертвовать придётся памятью GPU. Тем самым можно освободить ОЗУ.
Так это собсно и есть тема для обсуждения. "Flat" рисование (правая сфера) было просто к слову (просто ситуевина принципиально та же). Обсуждение "кого же освобождать" лишено смысла - ясно что данные надо хранить на GPU.
Итак вот у нас появилось "другое/альтернативное представление", в случае деталированной модели оно неизбежно, тут уже не заткнуть. И мы хотим "запузырить ее на видеокарту через VBO"
. Ваши действия?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Архитектура VBO
«
Ответ #29 :
Февраль 02, 2016, 15:30 »
Цитата: Igors от Февраль 02, 2016, 15:11
И кроме банального "альтернатива скорость - расход памяти" напомню еще фактор "объем кода". Паршивенький glBegin/glEnd = один маленький метод, а вот "еще одно представление данных" - ой нет
Да ну, какой там объем то
Пара вызовов glNormalPointer, glVertexPointer, да еще glDrawArrays в конце)
Но если памяти жалко, можно фрагментами рендерить.
Сгенерили часть данных в вектора - отрендерили - повторили.
Других решений пока не вижу, тем более все равно у Вас нормали заранее просчитываются.
А шейдеры, конечно, слишком уж узкоспециальное решение, согласен.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Страниц:
1
[
2
]
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...