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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Полигоны и Материал  (Прочитано 2814 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Октябрь 17, 2015, 15:28 »

Добрый день

Возникла необходимость рисовать разные полигоны с разными материалами и текстурами. Т.е. теперь полигон имеет ID которое определяет материал. Сейчас все банально, объект имеет

- вектор полигонов
- вектор вертексов (позиции)
- доп вектора для вертексов (нормали, UV(s), цвет)

На это конечно навешено VBO (для каждого контейнера). Кроме того рисование может на лету создавать вертексы/полигоны на основании имеющихся

Вот думаю как изменить эту структуру данных для "мульти-материалов". По существу вопрос чисто "архитектурный" (эх, все равно испугаются "VBO"). Что посоветуете?

Спасибо
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Октябрь 18, 2015, 17:51 »

Ах как часто мелькает что-то типа "надо изменить архитектуру приложения". Но вот когда ее действительно надо менять - так тихо  Улыбающийся 

Представим простейшее рисование с вызовом glDrawElements. Тут проблем нет

- установили первый материал
- отрисовали принадлежащие ему полигоны
- установили второй материал
и.т.д

Получается надо всего лишь иметь N контейнеров полигонов (по одному для каждого материала). А все данные вертексов остаются неизменными.

Ну, естественно, это не проходит. Нужно поддерживать с десяток режимов рисования, а изложенное выше применимо только к парочке из них. Вот хотя бы первый режим "рисовать точки". Тут никаких полигонов не юзается, просто glDrawArrays для вертексов. А теперь выясняется надо-то рисовать не все вертексы, а лишь принадлежащие полигонам с текущим материалом. Следующий режим "рисовать силуэт" - и опять он без полигонов, используются "ребра". И.т.д. В общем, в очередной раз наша оборона не выдержала ударов немецких танковых клиньев  Плачущий

Да, для тех кто далек от OpenGL: для простоты "материал" - просто "цвет", напр одни полигоны красные, др зеленые. В данном случае без разницы что в действительности там сотня параметров.

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


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