프로그래밍/DirectX

시야 변환

ZenoAhn 2018. 1. 7. 00:09

시야 변환

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