Почему альфа-смешение не работает в орто? - PullRequest
1 голос
/ 10 сентября 2011

Вот как я включаю ортопроекцию после рисования 3D объектов:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,Screen_Width,Screen_Height,0,0,1);

И вот как я включаю смешивание и рисование текстур в орто после рисования 3D объектов:

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 
glColor4f(1,1,1,1);

glBindTexture(GL_TEXTURE_2D,Texture1);
glBegin(GL_QUADS);
//draw 1st quad
glEnd();

glBindTexture(GL_TEXTURE_2D,Texture2);
glBegin(GL_QUADS);
//draw 2nd quad
glEnd();

glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);

Quad1 немного больше, чем Quad2, и охватывает некоторые части Quad2.Обе текстуры имеют альфа-канал как RGBA.

Проблема заключается в том, что Quad1 и Quad2 правильно перекрывают трехмерные объекты альфа-каналом, но альфа-канал Quad1 не работает при нахождении поверх Quad2.Он рисует поверх Quad2, как только RGB.

Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 10 сентября 2011

Включена ли буферизация глубины?Если это так, это может привести к тому, что фрагменты будут отброшены (не пройдя Z-тест) вместо альфа-смешивания с тем, что уже есть.

Если вы используете буфер глубины, вам нужно нарисовать прозрачные объекты сзади-передний порядок.

Для чисто 2D-сцены вам может даже не понадобиться буфер глубины, и вы можете просто отключить его:

glDisable(GL_DEPTH_TEST);
...