유연한 카메라 클래스 만들기
12.1 카메라 디자인
라이트,업,룩,포지션 네 가지 카메라 벡터를 이용하여 월드 좌표 시스템에서의 카메라 위치와 방향을 정의한다.
이 벡터들을 결국 월드 좌표 시스템에 상대적으로 정의된 지역 좌표 시스템을 표현하며 라,업,룩 세 벡터는 월드 내에서 카메라의 방향을 정의하기 때문에 묶어 방위 벡터라 부르기도한다. 방위 벡터는 반드시 정직교이어야 하는데, 일련의 벡터들이 정직교가 되기 위해서는 각각의 벡터가 서로 수직이어야 하며 단위 벡터여야한다. 이와 같은 제한을 두는 이유는 이후에 방위 벡터를 행렬의 행에 넣을 것이며, 행 벡터가 정직교라는 것은 행렬이 직교임을 의미하기 때문이다. 직교 행렬은 역행렬이 행렬의 전치와 같은 특성이 있음을 기억하자
CameraType 열거형 : 카메라의 타입을 지정하기위한 것 LANDOBJECT 모델과 AIRCRAFT 모델의 두 가지 카메라 모델이 지원됨. AIRCRAFT 모델은 공간을 자유롭게 이동할 수 있도록 해준다. 1인칭 슈팅 게임과같은경우 플레이어가 하늘을 날수 없을떈 LANDOBJECT 카메라 모델이 적합하다.
- 구현 방법
12.2.1 뷰 행렬 계산하기
뷰스페이스 변환을 위해선 변환 행렬 V로 카메라를 원점으로 이동시키고 XYZ축을 월드XYZ축가 정렬해야한다.
p를 원점으로 이동하는 이동은 p-p = 0 이므로 -p로 쉽게 얻을 수 있다.
직교행렬의 역행렬이 전치 행렬임을 이용해서 구한다.
12.2.2 임의의 축으로 회전하기
카메라 회전 메서드를 구현하기 위해서는 임의의 축을 기준으로 회전할 수 있어야 한다. D3DX 라이브러리는 이와 같은 작업을 위한 메서드를 제공한다.
D3DXMATRIX D3DXMatrixRotationAxis(
D3DXMATRIX pOut, -회전 행렬을 리턴한다.
CONST D3DXVECTOR3 *pV -회전의 기준축
FLOAT Angle -라디안 단위의 회전할 각도
);
12.2.3 Pitch, Yaw, Roll
방위 벡터는 월드 좌표 시스템에 상대적인 카메라의 방위를 나타내며, 세 개의 축을 기준으로 한 회전(pitch,yaw, roll)을 통해 방위 벡터를 갱신하는 방법이 필요하다.
피치 - 라이트를 기준으로 회전
요 - 업을 기준으로 회전
롤 - 룩을 기준으로 회전
LANDOBJECT의 경우엔 yaw메서드에 카메라의 전방 벡터가 아닌 월드의 y-축을 기준으로 회전 roll메서드는 이용불가하게 할것.
피치의 경우
D3DMATRIX ;
D3DXMatrixRotationAxis(&T,&_right,angle) 라이트를 축으로 angle만큼 회전하는 회전행렬 T를 구한다.
D3DXVec3TransformCoord(&_up,&_up,&T); 업을 회전
D3DXVec3TransformCoord(&_look,&_look,&T); 룩을 회전
12.2.4 걷기, 옆걸음질, 날기
우리가 '걷는다'라는 말을 할 때는 현재 바라보는 방향으로 이동하는 것을 의미한다(즉, 전방 벡터를 방향으로 이동). 옆걸음질은 바라보는 방향에서 양옆으로 이동하는 것을 의미하며, 우향 벡터로 이동하는 것이다. 마지막으로 날기는 상향 벡터로 이동하는 것이다. 이 축들 중 한 방향으로 이동하기 위해서는 간단히 위치 벡터에 우리가 이동하고자 하는 방향을 가리키는 벡터를 더하면된다
지상의 물체를 이동할 때는 회전과 마찬가지로 약간의 제한이 필요하다. 예를 들어, LANDOBJECT 물체는 위를 보는 상태에서 전진하거나 기울어진 상태에서 옆걸음으로 공중에 뜰 수 없어야 한다. 즉 xz평면으로 움직임을 제한해야 한다.
12.4 요약
*우리는 우향 벡터,상향 벡터, 전방 벡터,그리고 위치벡터를 이용해 월드 좌표 시스템 내에서의 카메라 위치와 방위를 표현하였다.
Nina had always found roulette to be a fascinating game but had never taken it seriously. One evening, feeling adventurous and with https://twoupcasinopokies.com/ a touch of curiosity, she decided to try her luck with an online roulette game. She set a modest budget and began placing small bets on various numbers and colors, enjoying the thrill of watching the wheel spin.