2010-04-26 4 views
3

GLSL 프래그먼트 쉐이더에서 내 장면의 객체까지 스케일되지 않은 (실제 클리핑면으로부터의 실제 거리) 거리를 사용하려고합니다. gl_FragCoord.z ​​값이 예상보다 작습니다. 내 버텍스 쉐이더에서는 ftransform()을 사용하여 gl_Position을 설정합니다. 2와 3 사이의 값을 볼 때 15와 20 사이가 될 것으로 예상됩니다.프래그먼트 쉐이더 눈금 - 비 계단식 깊이 좌표

실제 눈가 깊이를 어떻게 얻을 수 있습니까? 감사합니다.

답변

4

원하는대로 버텍스 쉐이더에서 다양하게 전달하십시오.

조각 쉐이더에서 사용할 수있는 Z 값은 z- 근거리/z- 원 (투영 행렬에서) 및 DepthRange를 기준으로 정규화를 거쳤습니다. 그래서 당신이 겪은 일은 직접적인 것이 아닙니다. 기술적으로, 버텍스 쉐이더 뒤에서 발생하는 Z에 대한 다양한 OpenGL 연산을 되 돌리는 것으로 재구성 할 수는 있지만, 원하는 것만 전달하는 것보다 프로젝션 매트릭스를 되 돌리는 것이 비현실적이기 때문에 더 많은 문제가 발생할 수 있습니다 , 정확하게.

부수적으로, gl_ModelViewMatrix * gl_Vertex으로 계산 한 Z는 가까운 Z 평면이 아닌 Z에서 계산됩니다.

+1

굉장 해요, 방금 부동 소수점으로'- (gl_ModelViewMatrix * gl_Vertex) .z'를 전달했습니다. –