[이득우 게임수학] 10. 3차원 공간 : 입체 공간의 생성

    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가지 경우가 발생한다

    1. x -> y -> z
    2. x -> z -> y
    3. y -> x -> z
    4. y -> z -> x
    5. z -> x -> y
    6. 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값은 음수값을 갖는다.
    반응형

    댓글

    Designed by JB FACTORY