실시간 렌더링에서 플레이어,
즉 카메라가 바라보는 방향과 위치의 정보를 담고 있는 행렬을
뷰 매트릭스라 한다.
일단 왼손 좌표계와 오른손 좌표계가 있다.
이 둘의 차이는 그냥 Z축이 반대다
그래서 뷰 매트릭스를 생성하기 위해 두 가지 함수가 있는데
XMMatrixLookAtLH 랑
XMMatrixLookAtLR 로
카메라의 위치, 바라보는 타겟의 위치, 업 벡터 세개를 매개변수로 받아
뷰 매트릭스로 바꿔준다.
근데 주로 LH를 쓰고 LR는 거의 쓰질 않는데
아마 다른 엔진이나 OpenGL 같이 오른손 좌표계를
쓰는 프로젝트에 이식하거나 할 수 있으니
일단 만들어 둔게 아닐까 생각함
카메라의 위치는 0, 0, -10에 두고
카메라 회전 각도는 0, 0, 0이니
이를 뷰 매트릭스로 변환하기 위해서는
먼저 회전 방향 xyz를 라디안으로 바꿔준다.
pitch, yaw, roll 요 셋은 각각 x, y, z 회전축의 방향 값이고
m_rotation 의 x, y, z 회전 방향 값을 라디안으로 바꿔준 값이다.
XMMatrixRotationRollPitchYaw 함수를 사용하면 회전값을 매트릭스로 만들어 주는데
이 회전 매트릭스는 카메라의 회전방향에 맞춰
업 벡터와 가르키는 방향을 회전시키는 연산을 할때 씀
이건 0, Y, 0 즉 y값을 기준으로 회전하는 행렬이다.
연산 원리만 쉽게 설명하기 위해 이렇게 했는데
x랑 z까지 포함하면 식이 엄청 길어짐
예를 들어 y축을 30도 만큼 회전 시킨 행렬을 생성하게 되면
이런 값을 갖게 되는 것이다.
sin cos 30도가 머였는지 이젠 기억 안나도
괜찮다 전부 컴터가 연산해주니까
그럼 y축 30도 회전시킨 LookAtVector는 이렇게 연산된다.
UpVector는 설명할것도 없고 동일하게 회전되는데
y축만 회전시켰으니 그대로 0,1,0이 됨
마무리로 가르키는 방향 좌표를 카메라 포지션만큼 더하면 됨
이제 결과들을 viewMatrix로 생성하면 끝이다
댓글 없음:
댓글 쓰기