시야 변환
View Matrix를 구하는 과정을 알아보자.
View Transform(뷰 변환)은 월드를 카메라 좌표계로 만드는 변환이다.
World 를 기준으로한 Local Space의 원점과 x, y, z 축을 나타내는 동차 좌표들이 다음과 같이 있다고하자.
Qw = (qx,qy,qz,1)
Uw = (ux,uy,uz,0)
Vw = (vx,vy,vz, 0)
Ww = (wx,wy,wz,0)
위의 정보를 근거로 View->World 좌표계 변환 행렬을 만들면 다음과 같다.
| ux, uy, uz, 0 |
W = | vx, vy, vz, 0 |
| wx, wy, wz, 0 |
| Qx, Qy, Qz, 1 |
그런데 우리가 원하는것은 World -> View 변환 행렬을 원하므로 이것의 역행렬을 구하면 된다.
일반적으로 시야와 월드 공간은 이동과 회전만 처리하므로 W = RT로 두어도 무방하다. 이런 경우 역행렬을 더 간단하게 구할수 있다.
따라서 시야 행렬은 다음과 같은 형태가 된다.
V = W-¹= (RT)-¹ = T-¹R-¹ = T-¹(R^t)
| 1, 0, 0, 0 | | ux, uy, uz, 0 | | ux, uy, uz, 0 |
= | 0, 1, 0, 0 | | vx, vy, vz, 0 | = | ux, uy, uz, 0 |
| 0, 0, 1, 0 | | wx, wy, wz, 0 | | ux, uy, uz, 0 |
| -Qx, -Qy, -Qz, 1 | | 0, 0, 0, 1 | | -Q*u, -Q*v, -Q*w, 1 |
이제 시야 행렬을 구축하는데 필요한 벡터들을 구하는 방법을 알아보자.
Camera의 원점 Position과 Target Position, 그리고 World Up Vector만 알면 구할 수 있다.
W = Normalize(Target Pos - Camera Pos) // 카메라의 Z축
U = W x World Up Vector // 카메라의 X축
V = U x W // 카메라의 Y축
여기서 World Up Vector와 W는 단위 벡터이므로 V 또한 단위벡터이다.
'프로그래밍 > DirectX' 카테고리의 다른 글
DirectXMath (0) | 2018.03.24 |
---|---|
1. Direct3D11 초기화 (0) | 2017.12.31 |
0.DirectX 11 기본 지식 (0) | 2017.12.31 |
Easy Color Shader (0) | 2017.03.15 |