Создание текстуры OpenGL с альфа-каналом с использованием NSBitmapImageRep - PullRequest
0 голосов
/ 03 августа 2011

Я загружаю PNG, используя:

theImage = [NSBitmapImageRep imageRepWithContentsOfFile:imagePath];

, из которого я могу успешно создать текстуру gl и правильно визуализировать без какой-либо прозрачности.Однако, когда я включаю смешивание, используя:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

Текстура отображается с правильным прозрачным фоном, но цвета изображения неправильные.

Я пробовал несколько вариантов в функции смешивания,GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_DST_ALPHA и т. Д.

Меня учили, может быть, мне нужно переупорядочить биты в данных изображения, возможно, каналы были перепутаны, но я быне ожидайте, что он будет правильно отображаться, когда смешивание отключено в этом случае.

В качестве альтернативы, я мог бы использовать libPNG, но я хотел бы попробовать NSBitmapImageRep, если это возможно.

1 Ответ

4 голосов
/ 03 августа 2011

Как насчет предоставления скриншота?


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

  • нормальная альфа: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

или

  • предварительно умноженное альфа: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
...