2010-12-16 4 views
3

OpenGL에서는 대면 폴리곤 만, 앞면 다각형 만 또는 두 가지 모두를 그릴 수 있습니다. 매니 폴드 삼각형 메쉬를 렌더링 한 다음 프레임 버퍼는 지우지 만 깊이 버퍼는 지우지 말고 다시 마주 보는 다각형 만 다시 렌더링합니다. 기대하는 것은 무엇입니까?OpenGL에서 다각형을 마주보고

나는 나에게 주어진 다음과 같은 대답이 잘못 생각 :

당신은 삼각형에 직면 뒷면을 볼 수 있습니다. 첫 번째 렌더링 패스는 이 정면 인 삼각형의 깊이 값이 인 깊이 버퍼가됩니다. 두 번째 렌더링 패스 은 다시 삼각형을 향하게 렌더링됩니다. 따라서 최대 깊이 값은 입니다. 래스터 화 된 모든 삼각형 의 깊이는이 픽셀의 현재 깊이 인 에 비해 입니다. 깊이 버퍼가 모두 가까운 깊이 값 (작은 값)으로 설정되어 있지만되기 때문에 은 먼 깊이 값 (큰 값) 삼각형을 직면하고 다시 렌더링됩니다 차별. "

하지만 생각하는 대답은 :

깊이 버퍼를 삭제되지 않기 때문에, 여전히 삼각형에 직면 전면의 깊이 값을 포함, 그것은 삼각형을 직면하고 다시 밖으로 던져, 아무것도 표시하지 않을 것이다

.

어떤 답이 맞습니까?

답변

0

두 번째 단락이 false라고 생각합니다.

닫힌 매니 폴드 인 Moebius 밴드를 상상해보십시오. 눈에 더 가까운 뒷쪽 삼각형 (흰색, 앞면이 검은 색)이 명확하게 표시됩니다. 두 번째 패스에서 그들은 깊이 테스트를 통과하고 렌더링 :

alt text

+0

개체가 단면 메쉬 인 경우 (즉, 3 개의 꼭지점마다 하나의 삼각형 만 제공하고 하나의 법선으로 한 번만 렌더링되는 경우), 뒤쪽 삼각형은 사용자가 말한대로 렌더링되지만 오브젝트가 매니 폴드가 아닙니다 (법선이 뒤집는 점이 있어야합니다.) 양면으로 렌더링하면 각 픽셀마다 앞면과 뒷면이 같은 삼각형이 같은 깊이로 표시됩니다. 심도 함수가 GL_LEQUAL, GL_EQUAL, GL_GEQUAL 또는 GL_ALWAYS 인 경우 뒤쪽에있는 것들은 두 번째 패스에서만 렌더링됩니다. –

1

상황에 따라 다르다! 메쉬가 2 차원 매니 폴드 (즉, 표면상의 임의의 점 주변의 충분히 작은 영역 위에있는 평면과 위상 적으로 등가 임) 인 객체라고 가정하고 첫 번째 패스는 앞면 및 뒷면을 향한 삼각형 또는 앞면을 향한 삼각형을 렌더링한다고 가정합니다 깊이 함수가 GL_LESS 또는 GL_LEQUAL이면 앞쪽 삼각형이 항상 뒤쪽 삼각형의 앞에 있기 때문에 항상 깊이 테스트가 실패하게되므로 두 번째 단락이 맞습니다.

물론 깊이 함수로 GL_GREATER 또는 GL_GEQUAL을 사용하면 그 반대가 사실이므로 첫 번째 단락이 정확합니다.