и некоторые из текстур имеют альфа-цвет, который должен быть невидимым.
Это на самом деле называется цвет клавиш .
.Альфа-канал - это дополнительный канал, добавляющий к «обычным» каналам RGB.Когда используется альфа-смешение, в качестве непрозрачности используется значение альфа-канала.
Я могу понять это, просто взглянув на него.Проблема в том, как найти это значение в файле?
Если используется цветовая клавиша, используется либо какой-то определенный цвет, используемый для всех изображений, либо отдельно сохраняется значение клавиши, загружаяэто с файлом изображения.Другим распространенным методом является использование значения левого верхнего пикселя в качестве основного цвета.
Как мне учесть тот факт, что цвет должен быть удален из текстуры при визуализации?
При подготовке данных изображения с помощью альфа-канала, созданного с помощью цветового ключа:
for(i = 0; i < pixelcount; i++) {
if( source[i].r == key.r && source[i].g == key.g && source[i].b == key.b ) {
dest[i].r = dest[i].g = dest[i].b = dest[i].a = 0;
continue;
}
dest[i].r = source[i].r;
dest[i].g = source[i].g;
dest[i].b = source[i].b;
dest[i].a = 255;
}
Обновление : В случае альфа-канала, созданного с помощью цветового ключа, можно использовать альфа-тестирование вместо смешивания.Что хорошо при альфа-тестировании, так это то, что он не требует глубокой сортировки геометрии перед рисованием.
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5);
Идеальный способ - использовать формат файла изображения с поддержкой альфа-канала(PNG, TGA, OpenEXR,…), и не использовать BMP (фактически формат файла BMP допускает 4-й канал, и фактически я однажды написал свой собственный загрузчик BMP с поддержкой альфа-канала и плагин экспорта Photoshop, многие годыназад).