Make Unreal REAL.
article thumbnail
이득우의 게임 수학

 

하나의 물체를 표현하기 위한 메시 데이터에는 자신만의 공간에서 물체를 구성하는 정점의 위치 정보가 저장된다.

  • 물체의 정보를 담기 위해 부여한 자신만의 공간을 로컬 공간(Local space)이라고 한다.

 

여러 물체를 모아 게임 콘텐츠를 만드는 데 사용되는 새로운 공간을 월드 공간(World space)이라고 한다.

 

 

물체를 기준으로 로컬 공간에서 설정된 방향 정보를 로컬 축(Local axis)이라고 한다.

  • 로컬 축 정보는 오직 회전에만 영향을 받는다.

 

 

회전 변환에서 로컬 공간의 표준 기저 벡터 e₁(1, 0), e₂(0, 1)는 r(cosθ, sinθ), u(-sinθ, cosθ)로 변한된다.

  • 따라서, 모델링 행렬 M은 삼각함수 대신 로컬 축 정보를 사용해 계산할 수도 있다.

 

 

책의 예제인 CK소프트렌더러의 Transform 컴포넌트도 로컬 축 정보를 제공하며, 최종 모델링 행렬은 로컬 축 정보를 사용해 계산된다.

 

// 책의 예제인 CK소프트렌더러에 정의된 로컬 축
class TransformComponent
{
public:
    void SetRotation(float InDegree) { _Rotation = InDegree; Update(); }
    void AddRotation(float InDegree) { _Rotation += InDegree; Update(); }
    const Vector2& GetLocalX() const { return _Right; }
    const Vector2& GetLocalY() const { return _Up; }
    
private:
    Vector2 _Right = Vector2::UnitX;
    Vector2 _Up    = Vector2::UnitY;
    
    FORCEINLINE void Update()
    {
        float sin, cos;
        Math::GetSinCos(sin, cos, _Rotation);

        _Right = Vector2(cos, sin);
        _Up    = Vector2(-sin, cos);
    }

    FORCEINLINE Matrix3x3 TransformComponent::GetModelingMatrix() const
    {
        return Matrix3x3(
            Vector3(_Right.X * _Scale.X, _Right.Y * _Scale.X, 0.f),
            Vector3(_Up.X * _Scale.Y, _Up.Y * _Scale.Y, 0.f),
            Vector3(_Position.X, _Position.Y, 1.f)
        );
    }
}

'게임 수학 > 이득우의 게임 수학' 카테고리의 다른 글

게임 엔진의 워크플로우  (0) 2023.05.01
리소스 저장소  (0) 2023.04.30
모델링 행렬의 설계  (0) 2023.04.28
텍스처 매핑과 UV  (0) 2023.04.27
무게 중심 좌표의 계산  (0) 2023.04.26
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그