2017-02-21 2 views
1

저는 OpenGL을 처음 접했고 간단한 게임 엔진을 직접 만들어 재미있게 만들었습니다. 이제 텍스트가있는 HUD를 만들려고합니다. 그렇게하기 위해서, 프래그먼트 쉐이더가 텍스쳐 쿼드에 사용할 폰트 텍스처 맵을 프로그래밍 방식으로 생성하고 있습니다. 이해할 수있는 한, 이것이 일반적인 접근 방법입니까?렌더링 순서를 변경하여 부분적으로 투명한 글꼴 텍스처를 쌓아 놓습니다.

이 대부분 잘 작동

는 텍스트는 그때 같은 지역에있는 다른 텍스트 메시를 추가하는 경우 (그림. 1)

예상대로 뒤에 무엇이든 볼 수 있도록 투명한 배경으로 화면에 나타납니다 예상되는 방식으로 첫 번째하지만 (카메라에 가까운) 높은 Z- 인덱스로, 그 이전의 텍스트와 혼합 (올바른 사용법?)의 맨 위에 렌더링 (그림. 2)

그러나, 나는 경우 첫 번째 문자열 (분홍색 하나)이 카메라에 더 가깝도록 렌더링 인덱스가 변경되지 않도록 Z- 인덱스를 뒤집습니다. 3 어디에서 - 텍스트 배경이 여전히 투명하지만 다른 텍스트를 겹쳐 쓰지 않고 덮어 쓰는 것 같습니다.

참고 : 두 개의 메시가 렌더링되는 순서를 반대로 바꾸면 흰색 텍스트가 위반자가된다는 점만 제외하면 동일한 효과가 발생합니다.

즉, 왜 z- 인덱스의 순서가 렌더링 순서와 일치 할 때만 올바르게 혼합됩니까? 내 가설은 부분적으로 투명한 배경을 가진 쿼드를 "뒤에서"렌더링하려고하면 먼저 렌더링해야한다는 것입니다. 그렇지 않은 경우에는 깊이 테스트가 맨 위에 표시됩니다. 이것이 필자가 익숙해 져야 할 그래픽 렌더링의 기본 규칙입니까? 스태킹 순서를 추적하고 올바른 순서로 항목을 렌더링해야합니까? 당신이 텍스처의 투명한 부분을 통해 볼 수 있습니다 있지만

render order affects blending

답변

2

, OpenGL은 할 수 없습니다. 색상을 혼합 할 때 깊이 버퍼를 특정 값으로 설정하고 뒤에 무언가를 렌더링하려는 경우 보이지 않는 부분에 의해 방해받습니다.

이 문제를 해결하려면 깊이 테스트를 사용하지 않도록 설정하거나 삼각형을 앞뒤로 정렬 할 수 있습니다.

+1

오브젝트 뒤에있는 텍스트를 표시하지 않으려는 경우 텍스트 지오메트리에 대한 심도 기록 기능을 비활성화 할 수 있지만 깊이 테스트 기능은 계속 사용할 수 있습니다. – BDL

관련 문제