유튜브에서 DirectX 11 엔진 만들기 튜토리얼 영상 보면서 구현해보고 있는 중이다.. 영어라서 완벽히 다 이해하진 못함
아래는 카메라 클래스를 구현해서 카메라 시점을 이동시키는건데, 그냥 이동시키는게 아니라 lookAt지점(바라보는 곳)을 한 점(원점)에 고정시킨 뒤 이동시키는 것이다.
카메라를 앞으로 이동시키면 z 값이 증가하고, 오른쪽으로 이동시키면 x 값이 증가하고, 위로 이동시키면 y값이 증가한다. pitch는 x축 기준 회전 각도이고, yaw는 y축 기준 회전각, roll은 z축 기준 회전각이다. 여기서 각은 모두 라디안(radians) 단위다. 30도가 일반적인 각도(degree), 파이/6 이 라디안.
위 2D 이미지에 lookAt을 고정시킨 뒤 카메라를 위로(x축방향) 이동시키면 y축으로 회전하게 된다. 즉 y축으로 회전하는 각(radians) yaw를 얻을 수 있다. 그러면 y축으로 회전 변환을 yaw만큼 적용해 최종 위치를 계산할 수 있다.
예를 들면 아래와 같이 카메라가 원점에 초점(lookAt)을 고정할 때 x축으로 5만큼 이동한다면 카메라는 정면을 보는 것이 아니라 계속해서 원점을 바라보기 위해 회전할 것이다. (물론 실제로 카메라가 움직이는 것은 아니다. 카메라가 움직인 것처럼 화면이 보이도록 하는 것이다.)이때 저 각도를 구하기 위해 삼각함수 tan의 역함수인 arctan를 이용하는 듯 하다. tan가 입력으로 각을 받으니 역함수인 arctan는 각을 반환할 것이다. 그래서 DirectXMath에서의 arctan 함수인 atan, atan2를 이용하는 듯 한데 역시 3차원 공간 좌표는 직관적으로 이해하기 어렵다.
'게임 공부 > 게임 개발 일지' 카테고리의 다른 글
[DX] 카메라 클래스 설계 및 구현 (0) | 2021.05.04 |
---|---|
assimp를 이용하여 3D 메쉬 가져와서 렌더링 해보기 (0) | 2021.04.08 |
애니메이션 테스트 (0) | 2020.12.21 |
[OpenCV] 이미지 좌우 반전 + 특정 색상 변경 (0) | 2020.12.21 |
적 총알 발사 기능 추가 (0) | 2020.12.13 |
댓글