Настройка сцены:
Я рисую карту высот (огромную непрозрачную поверхность) с большим количеством рекламных щитов (обычно травы, цветов и т. Д.).
Таким образом, к рекламным щитам применяется в основном прозрачная цветная карта, окрашенная всего в несколько пикселей для получения формы травы или листьев и тому подобного. Обратите внимание, что края этих фигур используют немного градиента прозрачности, чтобы они выглядели более гладкими, но я также пробовал использовать базовые, бинарные цветовые / прозрачные текстуры.
Код псевдопередачи выглядит так:
map->render();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
wildGrass->render();
glDisable(GL_BLEND);
Когда инструкция рендеринга wildGrass отображает несколько рекламных щитов в разных местах за один вызов OGL.
Проблема, с которой я сталкиваюсь, связана с прозрачностью и тем фактом, что рекламные щиты, по-видимому, скрывают друг друга, дажена их прозрачной области. Однако сплошной фон карты высот корректно отображается на этих прозрачных частях.
Вот сбой:
- Слева - явный фрагментный шейдер, который полностью сбрасываетсяпрозрачные пиксели
- справа без сброса, четко показывает плоский квадрат рекламного щита
Основано на моем понимании OGLсмешивание и некоторое чтение, кажется, что решение состоит в том, чтобы иметь контролируемый порядок рендеринга, начиная с самых удаленных объектов до ближайшего, так что в конце цветовой буфер будет правильно заполнен.
Я отчаянно нуждаюсьнадеясь, что есть другой способ ... Порядок здесь, как правило, варьируется в зависимости от точки зрения, что означает, что он должен применяться в реальном времени для каждого кадра. Кроме того, характер этих рекламных щитов должен быть представлен в очень большом количестве ... Оповещение о производительности!
Есть предложения или мой подход к смешиванию неправильный?