Проблема прозрачности с opengl / lwjgl

1

Я пытаюсь нарисовать две текстуры в 3D-пространстве, которые содержат прозрачность. Когда они не перекрываются, они работают нормально:

Изображение 174551

Однако, когда одна текстура перекрывает другую, прозрачность означает, что вы можете видеть ее позади:

Изображение 174551

При инициализации смешивания я использую GL_SRC_ALPHA и GL_ONE_MINUS_SRC_ALPHA.

Теги:
opengl
lwjgl

2 ответа

1

Одна из возможностей заключается в использовании ключевого слова discard в шейдере фрагментов, поскольку альфа-тест больше не у нас. Это имеет недостаток, заключающийся в том, что сглаженные края объектов.

Другая возможность - это сортировка по глубине объектов и возврат назад. Очевидным недостатком является необходимость выполнения преобразований и сортировки в первую очередь. Иногда это можно избежать, если порядок объектов можно определить статически (когда камера не сильно изменится). Другим недостатком является перетаскивание заштрихованных пикселей чем-то другим, поэтому отбрасывая производительность.

Наконец, вы можете использовать альфа-покрытие, где антиадресное оборудование используется для обеспечения прозрачности. Это не требует сортировки и делает края объектов гладкими. Недостатком является то, что это разрешено для каждого контекста рендеринга и может быть недоступным повсюду.

1

Вам нужно либо сортировать глубину, либо использовать альфа-тестирование:

glEnable(GL_ALPHA_TEST);
glAlphaTest(GL_GREATER, 0.0f);

который будет рисовать только пиксели с альфа-значением более 0f. Однако это не работает для смешивания прозрачных пикселей. Решение Andon - это тот, который я использую, хотя я работаю в 2D, и у меня должна быть прозрачность для эффектов дыма.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню