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