[이득우 게임수학] 10. 3차원 공간 : 입체 공간의 생성
- 📕 Book/이득우 게임수학
- 2023. 2. 22.
10.1 3차원 공간의 설계
3차원 공간을 설계하는 방법은 왼손 좌표계와 오른손 좌표계 크게 두가지로 구분된다. 왼손 좌표계는 내가 바라보는 정면이 +z축 이고 위가 +y, 오른쪽이 +x인 방향이다. 오른손 좌표계는 나한테 오는 방향(나의 뒤방향)이 +z 축이고, 위가 +y, 오른쪽이 +x인 방향이다. 왼손과 오른손은 z축의 방향차이로 확인할 수 있다.
10.2 3차원 공간의 트랜스폼
3차원 트랜스폼 체계는 2차원 공간의 트랜스폼에서 기저벡트가 하나더 증가했을 뿐이다. 이동 변환을 위해 한 차원 더 늘어난 4차원 공간을 사용한다.
┌ S_x 0 0 0 ┐
S = │ 0 S_y 0 0 │
│ 0 0 S_z 0 │
└ 0 0 0 1 ┘
┌ 1 0 0 t_x ┐
T = │ 0 1 0 t_y │
│ 0 0 1 t_z │
└ 0 0 0 1 ┘
오일러 각
오일러 각(Euler's angle)은 3차원 공간에서 물체가 놓인 방향을 3개의 각을 사용해 표시하는 방법이다. 표준기저벡터를 축으로 하는 회전의 움직임은 방향에 따라 요(Yaw), 롤(Roll), 피치(Pitch)로 불린다.
- 요(Yaw) - 위 x출
- 롤(Roll) - 앞 z축
- 피치(Pitch) - 오른쪽 x축
3축의 회전 행렬은 다음과 같이 설계할 수 있다.
┌ 1 0 0 ┐
R_x = │ 0 cosθ -sinθ │
└ 0 sinθ cosθ ┘
┌ cosθ 0 sinθ ┐
R_y = │ 0 1 0 │
└ -sinθ 0 cosθ ┘
┌ cosθ -sinθ 0 ┐
R_z = │ sinθ cosθ 0 │
└ 0 0 1 ┘
회전행렬의 유도
세 번의 연속적인 회전으로 총 6가지 경우가 발생한다
- x -> y -> z
- x -> z -> y
- y -> x -> z
- y -> z -> x
- z -> x -> y
- z -> y -> x
이 책에서는 5번의 z->x->y 순서를 채택하였다.
R = R_yaw · R_pitch · R_roll
┌ cosα cosy + sinα sinβ sinγ -cosα sinγ + sinα sinβ cosγ sinα cosβ ┐
R_α · R_β · R_γ = │ cosβ sinγ cosβ cosγ -sinβ │
└ -sinα cosγ + cosα sinβ sinγ sinα sinγ + cosα sinβ cosγ cosα cosβ ┘
3차원 모델링 행렬
3차원 공간의 트랜스폼을 구성하는 크기(S), 회전(R), 이동(T) 변환 행렬은 다음과 같다.
┌ S_x 0 0 0 ┐
S = │ 0 S_y 0 0 │
│ 0 0 S_z 0 │
└ 0 0 0 1 ┘
┌ X_x Y_x Z_x 0 ┐
R = │ X_y Y_y Z_y 0 │
│ X_z Y_z Z_z 0 │
└ 0 0 0 1 ┘
┌ 1 0 0 t_x ┐
T = │ 0 1 0 t_y │
│ 0 0 1 t_z │
└ 0 0 0 1 ┘
┌ X_x S_x Y_x S_y Z_x S_z t_x ┐
M = T · R · S = │ X_y S_x Y_y S_y Z_y S_z t_y │
│ X_z S_x Y_z S_y Z_z S_z t_z │
└ 0 0 0 1 ┘
10.3 카메라 공간
3차원에서 카메라의 트랜스폼은 이동행렬과 회전행렬의 역행렬로 구할 수 있다.
M = T · R
M^-1 = (T · R)^-1 = R^-1 · T^-1
//최종 뷰 행렬 V
┌ -X_x -X_y -X_z x·t ┐
V = R^-1 · T^-1 = │ Y_x Y_y Y_z -y·t │
│ -Z_x -Z_y -Z_z z·t │
└ 0 0 0 1 ┘
10-1 실습
처음 그려보는 3차원 공간
10.4 오일러 각의 특징
오일러 각은 3차원 공간의 회전을 지정할 때 직관적인 인터페이스를 제공한다. 표준기저벡터를 회전축으로 사용하기 때문에 회전을 설계하기가 용이하다. 적은 용량으로 3차원 공간의 회전 정보를 기록할 수 있다.
짐벌락 현상
오일러 각을 사용할 때 특정 상황에서 회전 움직임이 제한되는 짐벌락(Gimbal lock) 현상을 감안해야한다.
- z축을 90도 회전시킨다.
- x축을 -90도 회전시킨다.
- y축을 회전해보면 처음의 z축 회전과 동일함을 발견할 수 있다.
10-2 실습
짐벌락 현상의 체험
회전 보간의 계산
경과된 시간에 따라 회전이 변화되도록 중간 회전값을 계산하는 것을 회전 보간(Rotaional interpolation)이라고 한다. 중간 회전 값은 선형 보간의 식을 사용해 얻을 수 있다.
θ` = (1-t)θ_start + tθ_end
한축에 대해서 회전하는 것은 문제가 없지만 두 축에 대해서 회전하는 오일러 각은 선형 보간식을 사용할 수 없다.
10.5 정리
- 3차원 트랜스폼과 카메라 설정방법
- 역행렬을 활용한 카메라의 뷰 좌표계를 구성하는 방법
- 뷰 공간에서 카메라 앞에 위치한 모든 물체의 z값은 음수값을 갖는다.