#opengl #transparency
#opengl #прозрачность
Вопрос:
Я пытаюсь отобразить листья травы. Простой способ — нарисовать два параллельных квадрата, пересекающихся посередине, вот так
Проблема в том, что первый отображаемый квадрат не будет прозрачным для следующего листа травы, который нужно нарисовать. Если я нарисую A, а затем B, B не будет отображаться за A
Вот как я визуализирую
void drawHighGrass(){
glDisable(GL_LIGHTING);
glClearColor(1.0, 1.0, 1.0, 1.0);
glColor4f(1.0, 1.0, 1.0, 0.95);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texturas[HIGH_GRASS]);
glCullFace(GL_FRONT);
glPushMatrix();
//glTranslatef(1000, 0, 1000);
glScalef(1, 1.5, 1);
glPushMatrix();
glTranslatef(-100 / 2, -10, 0);
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();
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(100, 0, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 1.0f); glVertex3f(0, 40, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3f(100, 40, 0);
glEnd();
glPopMatrix();
glPushMatrix();
//glTranslatef(1000, 0, 1000);
glTranslatef(0, -10, -100 / 2);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3f(0, 0, 100);
glTexCoord2f(1.0f, 1.0f); glVertex3f(0, 40, 100);
glTexCoord2f(0.0f, 1.0f); glVertex3f(0, 40, 0);
glEnd();
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(0, 0, 100);
glTexCoord2f(1.0f, 0.0f); glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 1.0f); glVertex3f(0, 40, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3f(0, 40, 100);
glEnd();
glPopMatrix();
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glEnable(GL_LIGHTING);
glCullFace(GL_BACK);
}
Ответ №1:
Я нашел решение:
glAlphaFunc(GL_GREATER, 0.5);
glEnable(GL_ALPHA_TEST);