2. 1. 시야 변환 개괄
• 시야공간(이하 View Space)는 카메라에 부착된
좌표계이다.
카메라는 이 좌표계의 원점에 위치해서
양의Z축을 바라본다.
• X축은 카메라의 오른쪽이 +방향, Y축은 카메라의
위쪽이 +방향이다.
• 렌더링 파이프라인의 후반 단계들에서는 장면의
정점들을 세계공간(이하 World Space)을
기준으로 서술하는 대신 카메라 좌표계를
기준으로 서술하는 것이 편리하다.
• World Space에서 View Space로의 좌표 변환을
시야 변환(View Transform)이라 부르며 해당 변환
행렬을 시야 행렬(View Matrix)라고 부른다.
3. 1. 시야 변환 개괄
• Qw = (Qx, Qy, Qz, 1), uw = (ux, uy, uz, 0), vw(vx, vy, vz, 0), ww = (wx, wy, wz, 0)이
각각 World Space를 기준으로 한 시야 공간의 원점과 x, y, z 축을 나타내는 동차좌표들이라고 하면
View Space에서 World Space로의 좌표 변경 행렬은 다음과 같다.
• 하지만 이는 지금 필요한 변환 행렬이 아니며, 반대 방향, 즉 World Space에서 View Space로의 변환
행렬이 필요하다.
역변환은 앞선 내용들에서 봤듯이 역행렬로 주어진다.
즉, World Space에서 View Space로의 변환 행렬은 W-1이다.
4. 1. 시야 변환 개괄
• 일반적으로 World Space의 좌표계와 View Space의 좌표계는 원점의 위치와 좌표축들의 방향만 다르다.
이와 같은 경우 W=RT라고 생각할 수 있다.(World Matrix를 회전 후에 이동을 적용하는 방식으로 분해할
수 있다.) 이러한 형태의 행렬은 역행렬을 구하기가 수월하다.
V = W-1 = (RT)-1 = T-1R-1 = T-1RT = T-1RT
6. 2. 주요 메서드의 구현
2.2. SetLens 메서드
• 시야 절두체는 시야를 제어한다는 점에서 카메라의 렌즈에 해당한다고 할 수 있다.
• SetLens 메서드는 절두체 속성들을 설정해 두고, 투영행렬도 구축한다.
7. 2. 주요 메서드의 구현
2.3. 유도된 절두체 정보
• SetLens 메서드에서 보았듯 수직 시야각은 카메라 클래스의 사용자가 직접 설정한다.
하지만, 수평 시야각을 직접 설정하는 방법은 없다.
대신, Camera class는 수평 시야각을 계산해주는 메서드를 제공한다.
• 또한 가까운 평면과 면 평면에서의 절두체의 너비와 높이를 리턴시켜주는 메서드를 재공한다.
8. 2. 주요 메서드의 구현
2.4. 카메라 변환
• 충돌 검출을 무시할 때, 1인칭 카메라가 갖추어야 할 기능 또는 특징은 다음과 같다.
1. 카메라를 Forward Vector를 따라 앞 또는 뒤로 움직인다.
- Forward Vector를 따라 이동시켜서 구현
2. 카메라를 Right Vector를 따라 좌우 이동한다.
- Right Vector를 따라 이동시켜서 구현
3. 위, 아래를 볼 수 있도록 카메라를 Right Vecotr에 대해 회전한다.
- 카메라의 Forward Vector와 Up Vector를 XMMatrixRotationAxix 함수를 이용하여
카메라 Right Vector를 중심으로 회전시켜 구현할 수 있다.
4. 좌, 우를 볼 수 있도록 카메라를 World Space의 Y축에 대해 회전한다.
- 카메라의 모든 기저벡터를 XMMatrixRotationY 함수를 이용해 World Space의 Y축에 대해
회전시킬 수 있다.
9. 2. 주요 메서드의 구현
2.5. View Matrix 구축
• 카메라의 회전이 여러 번 반복되면 수치 오차가 누적되어 Right, Up, Forward Vector들이 더 이상
정규직교벡터가 아닐 수 있기때문에 이 Vector들을 다시 한 번 정규화를 한 이후에 시야 변환
행렬을 계산한다.