2014-06-25 3 views
0

부분 불투명 한 색상의 텍스처와 투명성이있는 다른 부분을 렌더링하려고합니다.투명도가있는 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인지 확인했습니다.

+2

텍스처가로드되는 방식에 문제가있는 것 같습니다. 그 텍스처를로드하기위한 코드는 무엇입니까? – Maple

+0

@Maple, 당신 말이 맞았습니다. 텍스처 가져 오기였습니다. 감사! – andrepcg

답변

0

솔루션을 여기에 다시 말하면 다른 사람들이 쉽게 찾을 수 있습니다.

당신의 렌더링 코드는 정확할 것 같습니다. 그래서 문제가되었던 것은 텍스처 로딩 코드입니다. 텍스처를로드 할 때 내부 텍스처 픽셀 형식 (GL_RGBA8, GL_RGBA16 등) 및 원본 이미지 픽셀 형식 (GL_RGBA 또는 GL_BGRA 등)에 대한 올바른 플래그를 전달해야합니다.