OpenGL Multi Bit Alpha Textures
У меня возникли некоторые проблемы при рендеринге текстуры, которая имеет 8-битный альфа-канал, а именно: она сглаживается до 1 бита, а glBlendFunc(), похоже, ничего не делает.
Вот немедленный вызов режима:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glBegin(GL_QUADS);
{
glTexCoord2f(0, 0);
glVertex2f(0, 0);
glTexCoord2f(1, 0);
glVertex2f(356, 0);
glTexCoord2f(1, 1);
glVertex2f(356, 356);
glTexCoord2f(0, 1);
glVertex2f(0, 356);
}
glEnd();
Само собой разумеется, есть множество состояний OpenGL, которые были установлены за сценой, и однозначно одно из них
Есть ли какие-либо состояния, о которых я не знаю, которые могут помешать стадии смешивания?
Я правильно понял, что такое blendfunc? Похоже, это правильно с интернет-страниц, на которых я смотрел - однако я проверил текстуру в GDEBugger, чтобы изображение было определенно загружено с 8-битным альфа-каналом, а также пробовал изображения без альфа-канала и с одним битом альфа-канал.
Любая помощь будет принята с благодарностью!
Редактировать:
В ответ на ответы: я использую библиотеку загрузки изображений SOIL, я собираюсь просмотреть ее источник и посмотреть, как она работает. Прямо сейчас я просто визуализирую это изображение поверх уже отрисованной сцены - она определенно не сталкивается с проблемами глубины - на самом деле тест буфера глубины отключен.
2 ответа
Прозрачность лучше всего реализовать, используя функцию смешивания (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) с примитивами, отсортированными от самого дальнего к ближайшему.
Я бы проверил, чтобы убедиться, что ваши полигоны отсортированы на передний план, иначе смешивание будет иметь неправильные эффекты.
Я также хотел бы убедиться, что ваш вызов glTexImage2D использует GL_RGBA или GL_BGRA при загрузке текстуры.
РЕДАКТИРОВАТЬ:
Кроме того, glEnable(GL_ALPHA_TEST) и не забудьте установить альфа-функцию, используя glAlphaFunc.
Вы не опубликовали еще одну важную часть, именно так вы создали и настроили текстуру. И я думаю, что проблема здесь, а не в коде, который вы разместили.
Чтобы смешивание работало в приведенном выше случае, в текстуре должен быть включен альфа-канал.