Доброе утро, StackOverflow, у меня сейчас есть небольшая проблема, так как я не могу найти способ прозрачной визуализации части текстуры с помощью openGL.
Вот мои настройки: у меня есть четырехугольник, представляющий стену, покрытую этой текстурой (преобразованный в PNG для загрузки). Очевидно, я хочу, чтобы стена была непрозрачной, за исключением стекол. За стеной есть другая плоскость, которая должна показать пейзаж. Я хочу увидеть пейзаж из-за окна. Каждая текстура представляет собой TGA с альфа-каналом.
Сначала отображается «пейзаж», а затем стена. Я думал, что этого будет достаточно для достижения этого эффекта, но, видимо, это не так. Часть окна, которая должна быть прозрачной, черная, и пейзаж появляется, только когда я прохожу мимо стены.
Я попытался возиться с GLBlendFunc () после его включения, но, похоже, это не сработало.
Я забыл важный шаг?
Спасибо :)
источник
Ответы:
В дополнение ко всему, что вы заявили (текстуры с альфа-каналами, рисование ландшафта перед рисованием стены + окна), вам также нужно сделать еще две вещи.
Во-первых, вам нужно включить функцию смешивания OpenGL:
Во-вторых, вы должны указать OpenGL, как рассчитывать цвета смешанных пикселей (что, кстати, OpenGL называет «фрагментами»). В этом случае вы будете в порядке с чем-то простым, как это:
После включения смешивания OpenGL будет комбинировать цвета пикселей в соответствии с параметрами функции, которые вы задаете в glBlendFunc. В частности, он будет делать «source.color * source.alpha + destination.color * (1-source.alpha)», где «source» - это текстура, которую вы в данный момент визуализируете, а «destination» - это цвет уже в кадровый буфер (пейзаж). Поэтому, где ваш альфа-канал белый, вы получите цвет стены, а где-то черный канал, вы получите цвет ландшафта. Если альфа-канал имеет серый цвет, то вы получите некоторое затухание между двумя цветами.
Если ваше окно полностью прозрачно, то есть другие способы сделать это, когда порядок, в котором вы рисуете два многоугольника, не важен, но он начинает углубляться в более сложные понятия, такие как альфа-пороги. Вероятно, не требуется для вашей текущей ситуации.
источник