DirectX를 사용하면서 계속 동차 좌표계를 사용했지만 정확이 무엇인지 찾아보지는 않았다.
동차 좌표계의 간단한 정의와 컴퓨터 그래픽 쪽에서 내가 사용하는 사례를 몇 개 적어보려고 한다.
소개
간단하게 말하면 n차원 평면의 한 점을 표현하는데 n+1개 좌표를 사용하는 것이다.
2차원 공간의 (x, y)를 (wx, wy, w)가 되고
3차원 공간의 (x, y, z)를 동차 좌표계로 변환하면 (wx, wy, wz, w)가 된다.
즉 한 좌표에 대해 무한한 좌표 표현이 가능하다.
보통 (x, y, z) 일 경우 (x, y, z,1)로 표현하는 것이 일반적임
Transformation
XMVector3TransformCoord : 벡터와 행렬의 곱 연산 후 동차 좌표(w)에 1 적용
XMVector3TransformNormal : 벡터와 행렬의 곱 연산 후 동차 좌표(w)에 0 적용
이동을 적용받으면 W=1, 이동을 적용받지 않으면 W=0
원근 투영 행렬
참고 : https://aeopp.github.io/2020-12-03-ProjectionMatrix/
원근 투영 행렬을 곱한 W에는 곱하기 전 Z값을 보관하고 있음.
P(x, y, z, w) >>원근 투영 행렬 변환>> P'(x', y', z', w') w' = z
왜 w에 z값이 들어가는가?
원근감 표현을 위해 x, y좌표를 z로 나눌 필요가 있음.
그러나 원근 투영 행렬에서 z는 깊이 버퍼(0~1)로 사용하는데 만약 z를 z로 나누면 z는 1로 고정됨.
그래서 z값을 w에 보관하는 것.
'DirectX > 공부 내용' 카테고리의 다른 글
DirectX::FrameAnimation (0) | 2022.07.15 |
---|---|
DirectX:: Atlas Texture 처리 (0) | 2022.07.14 |
DirectX::GameEngineTexture & GameEngineSampler (0) | 2022.07.12 |
C++ Functional (0) | 2022.07.12 |
렌더링 파이프 라인 : ConstantBuffer (0) | 2022.07.11 |