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 с прозрачностью.

0

Решение

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

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

0

Другие решения


По вопросам рекламы [email protected]