버그 해결을 위한 모든 질문을 던져
0 votes
113 views

DirectX11를 독학하고 있는 학생입니다.

쉐이더도 같이 공부하는 중인데 그림자 매핑을 책을 따라 치고 있습니다.

그림자 매핑에서 깊이를 SV_POSITION인 float4의 z / w를 해서 구하는데,

어째서 화면에서 멀수록 z의 값이 1에 가깝고, 화면에서 가까울 수록 z의 값이 0에 가까운 지 모르겠습니다.

https://docs.microsoft.com/en-us/windows/win32/direct3d11/d3d10-graphics-programming-guide-rasterizer-stage-getting-started 에 따르면 Z는

Z = Viewport.MinDepth + Z * (Viewport.MaxDepth - Viewport.MinDepth) 

으로 계산이 되는데 view행렬과 projection행렬을 곱하여 나온 벡터의 z의 값은 near가 0이고 far이 1인 것으로 알고 있습니다.

혹시 이에 대해서 알고 계신 분이 계신다면 알려주시면 정말 감사하겠습니다.

asked (2 point) , 113 views

1 답변

+1 vote
음... 어떤부분에서 헤매시는지 잘 모르겠네요.

near가 0이고 far가 1이니까 화면에서 가까우면 0이고 멀면 1이 됩니다.

일단 개괄적으로 추가하자면

near가 0 far가 1이되는 과정은 투영 변환(projection transform)을 찾아보시고,

왜 0~1로 변환되어야 하는지는 클립 공간(clip space)에 대해서 찾아보세요.

혹시 z를 w로 나누는 이유라면 perspective division을 찾아보시면 됩니다.
answered (80 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

404 질문
536 answers
548 댓글
16,975 users