Текстура OpenGL с прозрачностью (альфа)

Я пытаюсь визуализировать текстуру с частично непрозрачным цветом, а с другой - с прозрачностью.

Это моя функция рисования для объекта:

void drawHighGrass(){
glDisable(GL_LIGHTING);
glClearColor(1.0, 1.0, 1.0, 1.0);
glColor4f(1.0, 1.0, 1.0, 1.0);

glDisable(GL_DEPTH_TEST);

glDepthMask(GL_FALSE);

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



glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texturas[HIGH_GRASS]);

glPushMatrix();
//glTranslatef(1000, 0, 1000);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3f(100, 0, 0);
glTexCoord2f(1.0f, 1.0f); glVertex3f(100, 40, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3f(0, 40, 0);
glEnd();

glPopMatrix();

glDisable(GL_TEXTURE_2D);

glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glDepthMask(GL_TRUE);
glEnable(GL_LIGHTING);

}

Проблема в том, что в прозрачной части он сплошной белый. Я могу сделать текстуру прозрачной с помощью glColor4f (1.0, 1.0, 1.0, 0.5), но это не то, что я хочу, потому что это делает прозрачной всю текстуру, а не только прозрачную часть.

Я проверил, мои файлы текстур - это PNG с прозрачностью.


person andrepcg    schedule 25.06.2014    source источник
comment
Похоже, проблема в том, как загружается текстура. Какой у вас код для загрузки этой текстуры?   -  person Maple    schedule 25.06.2014
comment
@Maple, ты был прав, это был импорт текстуры. Спасибо!   -  person andrepcg    schedule 25.06.2014


Ответы (1)


Переформулируем решение здесь, чтобы другие могли легко его найти.

Ваш код рендеринга кажется правильным, поэтому, похоже, проблема заключалась в коде загрузки текстуры. При загрузке текстуры вы должны быть уверены, что передаете правильные флаги для внутреннего формата пикселей текстуры (GL_RGBA8, GL_RGBA16 и т. Д.), А также для формата пикселей исходного изображения (GL_RGBA или GL_BGRA и т. Д.).

person Maple    schedule 25.06.2014