2010-05-09 3 views
0

Без glFog мой прозрачный png отображается хорошо, но с ним вы можете видеть прямоугольный фон и полосы других цветов (обратите внимание, что другой материал грязи работает по назначению, но не использует png или прозрачность).glFog, вызывающий прозрачный png, чтобы потерять прозрачность

alt text http://img203.imageshack.us/img203/4466/screenshot20100509at528.pngalt text http://img69.imageshack.us/img69/3131/screenshot20100509at456.png

Вот мой код тумана:

GLfloat colour[4]={0.8f,0.8f,1.0f, 1.0f}; 
glFogi(GL_FOG_MODE, GL_EXP); 
glFogfv(GL_FOG_COLOR, colour); 
glFogf(GL_FOG_DENSITY, 0.1); 
glHint(GL_FOG_HINT, GL_NICEST); 
glFogf(GL_FOG_START, 1.0); 
glFogf(GL_FOG_END, 5.0); 
glEnable(GL_FOG); 
glClearColor(0.8f,0.8f,1.0f,1.0f); 

И мой код PNG:

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

    GLfloat myAmbient[] = {0.7,0.7,0.7,1.0}; 
    glMaterialfv(GL_FRONT, GL_AMBIENT, myAmbient); 
    glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D, plantTexture); 
    glColor3f(0.5,0.5,0.2); 

    glPushMatrix(); 
     glTranslated(-1,-14,10); 
     glScaled(10,10,10); 
     glBegin(GL_QUADS); 
      glNormal3f(0,0,1); 
      glTexCoord2f(0,1); glVertex2i(1,0); 
      glNormal3f(0,0,1); 
      glTexCoord2f(0,0); glVertex2i(1,1); 
      glNormal3f(0,0,1); 
      glTexCoord2f(1,0); glVertex2i(0,1); 
      glNormal3f(0,0,1); 
      glTexCoord2f(1,1); glVertex2i(0,0); 
     glEnd(); 
    glPopMatrix(); 
    glDisable(GL_TEXTURE_2D); 
    glDisable(GL_BLEND); 

Я полностью потерял на этом. Есть идеи?

+0

некоторые вопросы: в каком порядке вы рисуете вещи? Вы используете альфа-тест? как выглядят цвета в прозрачных частях png? Что произойдет, если вы используете альфа = 0 для цвета тумана? – Bahbar

ответ

1

Поскольку ваш квад полупрозрачный, вы должны отключить запись в буфер глубины с помощью glDepthMask (false) до его рисования (при условии, что GL_DEPTH_TEST включен).