Как я должен делать независимое от глубины смешивание? - PullRequest
0 голосов
/ 10 сентября 2011

Я работаю над рендерером OpenGL 3 для инструментария GUI под названием Gwen . У меня почти все работает, но у меня есть некоторые проблемы, заставляющие все смешиваться правильно. Я отсортировал треугольники по текстуре, которую они используют, и упаковал их в VBO, поэтому в модульном тесте он в основном сводится к 3 слоям: заполненные прямоугольники без текстуры, текст, окна, кнопки и т. Д., Использующие текстура кожи.

Заполненные прямоугольники обычно рисуются поверх всего остального и смешиваются, но фоном для всего этого также является заполненный прямоугольник, поэтому я не могу на это рассчитывать. Существует конфликт Z-значений, если вы рисуете их последними (например, окна имеют текстурированную тень по краям, которая становится черной, потому что фон не проходит проверку глубины), и конфликт смешивания / z-значений, если вы рисуете их первым (например, : некоторые из выделенных участков рисуются поверх, а не смешиваются, как они и должны).

Я не могу рассчитывать на то, что смогу идентифицировать какой-либо конкретный слой, кроме заполненных прямоугольников. Различные слои имеют смесь значений z, поэтому я не могу просто нарисовать их в определенном порядке, чтобы все заработало. Во время написания этой статьи я подумал о простом методе рисования треугольников, отсортированных назад, вперед, но это может означать множество небольших вызовов отрисовки, которых я надеюсь избежать. Есть ли какой-нибудь метод, который включает в себя какое-то волшебное смешение вуду, которое позволило бы мне сохранить мои большие партии треугольников?

1 Ответ

3 голосов
/ 10 сентября 2011

Вы рисуете GUI ;Пакетирование не должно быть вашим первым приоритетом, потому что графический интерфейс мало что делает.Графический интерфейс почти никогда не будет вашим узким местом в производительности.Это пахнет преждевременной оптимизацией;во-первых, заставить его работать.Затем, если он слишком медленный, заставьте его работать быстрее.

Не существует простого механизма прозрачности, независимой от порядка.Лучше всего сделать все в правильном порядке Z.

...