Russian Qt Forum

Qt => OpenGL => Тема начата: Igors от Октябрь 17, 2015, 15:28



Название: Полигоны и Материал
Отправлено: Igors от Октябрь 17, 2015, 15:28
Добрый день

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

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

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

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

Спасибо


Название: Re: Полигоны и Материал
Отправлено: Igors от Октябрь 18, 2015, 17:51
Ах как часто мелькает что-то типа "надо изменить архитектуру приложения". Но вот когда ее действительно надо менять - так тихо  :) 

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

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

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

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

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

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