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.

http://www.gamedev.net/topic/105082-glalphafunc/

Вы не опубликовали еще одну важную часть, именно так вы создали и настроили текстуру. И я думаю, что проблема здесь, а не в коде, который вы разместили.

Чтобы смешивание работало в приведенном выше случае, в текстуре должен быть включен альфа-канал.

Другие вопросы по тегам