Прежде всего, как правило, лучше преобразовать растровые данные в 32-битные, чтобы каждый канал (R, G, B, A) получил 8 бит. При загрузке текстуры укажите 32-битный формат.
Затем при рендеринге вам нужно будет glEnable(GL_BLEND);
и установить функцию смешивания, например: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
. Это говорит OpenGL смешивать RGB текстуры с цветом фона, используя альфа-канал вашей текстуры.
Если вы делаете это с 3D-объектами, вы также можете отключить отсечение задней грани (чтобы вы видели заднюю часть объекта через переднюю часть) и отсортировать треугольники задом наперед (чтобы смешение произошло). в правильном порядке).
Если исходное растровое изображение является 8-битным (т. е. используется палитра с одним цветом, указанным в качестве маски прозрачности), то, вероятно, проще всего преобразовать его в RGBA, установив альфа-значение равным 0, когда цвет соответствует вашей маске прозрачности.
Некоторые подсказки, чтобы вещи (возможно) выглядели лучше:
- Ваш альфа-канал будет работать по принципу «все или ничего» (либо 0x00, либо 0xff), поэтому примените алгоритм размытия, чтобы получить более мягкие края, если это то, что вам нужно.
- Для текселей (текстурных пикселей) с нулевым альфа-каналом (полностью прозрачный) замените цвет RGB ближайшим непрозрачным текселем. Когда координаты текстуры интерполируются, они не будут смешиваться с исходным цветом прозрачности из вашего BMP.
person
geofftnz
schedule
20.06.2011