문제

현재 2D 게임에 대한 블렌딩 및 깊이 테스트가 켜져 있습니다. 텍스처를 그릴 때 "상단"텍스처는 교차하면 하부 텍스처의 일부를 제거합니다. 분명히, 텍스처의 투명한 픽셀은 깊이 테스트를 고려하고, 그려진 하부 텍스처의 모든 색상이 교차하면 제거됩니다. 또한 알파 블렌딩이 잘못 렌더링됩니다. OpenGL에 투명 픽셀을 깊이 테스트에 포함시키지 않도록 알릴 수있는 기능이 있습니까?

도움이 되었습니까?

해결책

아니요. 가능하지 않습니다. 이것은 모든 하드웨어 깊이 테스트에 해당됩니다.

GL (full 또는 es- 및 d3d)은 모두 동일한 모델을 가지고 있습니다. 다각형을 지정하는 순서대로 페인트합니다. 다각형 B 이전에 다각형 A를 그립니다. 논리적으로 다각형 A는 다각형 B에 앞에 있어야합니다. 다각형 B는 페인트되지 않습니다 (깊이 테스트 제공).

해결책은 현재보기 원산지에서 가장 먼 곳에서 가장 가까운 순서대로 다각형을 끌어내는 것입니다. 행복하게 2D 게임에서 이것은 단순한 종류 일뿐입니다 (아마도 자주 할 필요조차 없습니다).

3D 게임에서 BSP는이 문제의 기본 솔루션입니다.

다른 팁

glEnable( GL_ALPHA_TEST );
glAlphaFunc( GL_EQUAL, 1.0f );

이것은 완전히 불투명 한 것 이외의 알파로 모든 픽셀을 폐기합니다. 이 픽셀은 Z- 버퍼로 렌더링되지 않습니다. 그러나 이것은 다양한 Z- 버퍼 파이프 라인 최적화에 영향을 미치므로 심각한 둔화를 일으킬 수 있습니다. 당신이 만 사용하는 경우에만 사용하십시오 진짜 너무 가지고 있습니다.

셰이더를 사용하는 경우 블렌딩을 비활성화하고 Alpha 0으로 픽셀을 버릴 수 있습니다.

if(texColor.w == 0.0)
    discard;

어떤 유형의 블렌딩을 사용하고 있습니까?

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

알파가 0 인 조각이 깊이 버퍼에 쓰는 것을 방지해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top