2011-09-10 2 views
1

나는 3D 객체 그리기 후 직교 투사를 켜 방법이 있습니다 :왜 알파 블렌딩이 오르토에서 작동하지 않습니까?

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0,Screen_Width,Screen_Height,0,0,1); 

그리고 이것이 내가 혼합 켜고 3D 객체 그린 후 오르의 질감을 그리는 방법은 다음과 같습니다

glEnable(GL_TEXTURE_2D); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 
glColor4f(1,1,1,1); 

glBindTexture(GL_TEXTURE_2D,Texture1); 
glBegin(GL_QUADS); 
//draw 1st quad 
glEnd(); 

glBindTexture(GL_TEXTURE_2D,Texture2); 
glBegin(GL_QUADS); 
//draw 2nd quad 
glEnd(); 

glDisable(GL_BLEND); 
glDisable(GL_TEXTURE_2D); 

Quad1이입니다 Quad2보다 크고 Quad2의 일부분을 커버합니다. 두 텍스처 모두 알파 채널이 RGBA입니다.

문제는 Quad1 & Quad2는 알파가있는 3D 개체를 올바르게 오버레이하지만 Quad1의 알파는 Quad2 위에있을 때 작동하지 않습니다. 그것은 Quad2의 꼭대기에 RGB와 같이 그립니다.

이 문제를 어떻게 해결할 수 있습니까?

답변

2

깊이 버퍼링이 활성화되어 있습니까? 그렇다면 조각이 이미 존재하는 것과 알파 블렌딩 대신 파기 (Z 테스트 실패) 될 수 있습니다.

깊이 버퍼를 사용하는 경우 투명 오브젝트를 앞뒤 순서로 그릴 필요가 있습니다. 순수하게 2D 장면

은, 당신도 깊이 버퍼를 필요로하지 않을 수 있습니다, 당신은 단지 그것을 해제 할 수 있습니다

glDisable(GL_DEPTH_TEST); 
+0

당신에게 너무 감사합니다, 나는 GL_DEPTH_TEST을 해제하지 않았다 :) – jondinham