답변:
깊이 버퍼에 기록 된 값의 범위는 원하는 값입니다. 일반적으로 0 대 1 범위에 속합니다. 깊이 버퍼에 기록 된 실제 값은 NDC 공간에서 정점의 Z 값 (클립 공간에서 원근을 w로 나눈 후)을 기준으로 뷰포트 변환 중에 계산됩니다.
NDC 깊이 값 (원근 분할을 W로 나눈 후 Z)은 뷰포트 변환의 깊이 부분에 따라 크기가 조정되며 (X 및 Y 좌표를 창에서 픽셀과 연결할 좌표 공간으로 가져옵니다) (2^n-1)
- "두의 전력으로 읽을 수 의미하는 것 n
"- n
깊이 버퍼의 비트 정밀도입니다. 결과 값은 깊이 버퍼에 기록됩니다.
OpenGL은 뷰포트 변환 매트릭스의 정의를 glViewport 및 glDepthRange 호출로 분할 합니다. glDepthRange는 요청하는 깊이 범위를 결정하는 책임 요인을 제어합니다. 선택기로 glGetFloatv 를 호출 GL_DEPTH_RANGE
하여 현재 범위를 복구 할 수 있습니다 . 이렇게하면 범위가 0 대 1이라고 가정하지 않고 범위를 활용할 수 있습니다 (실제로 99.9 %의 시간은 변경하지 않습니다).
눈값에서 깊이 버퍼까지 Z 값을 따르도록 수학을 재구성하는 방법에 대한 통찰력을 원한다면 추가로 읽어보십시오.
깊이 버퍼의 값은 항상 0-1 사이입니다. 0은 렌더링 된 조각의 깊이가 평면에 가깝고 1은 조각의 깊이가 먼 평면에 있다는 것입니다. 그리고 그 사이의 모든 것.
월드 공간에서 실제 깊이를 알고 싶다면 깊이 버퍼에서 쉽게 계산할 수 있습니다.
depth = nearPlane + ( farPlane - nearPlane ) * depthBufferValue;
그렇기 때문에 투영 버퍼에서 근거리 및 원거리 평면을 지정하여 깊이 버퍼의 정확도를 높일 수 있습니다.
깊이 버퍼 값을 사용할 때 깊이와 거리의 차이도 알고 있어야합니다.