이득우의 게임 수학
하나의 물체를 표현하기 위한 메시 데이터에는 자신만의 공간에서 물체를 구성하는 정점의 위치 정보가 저장된다.
- 물체의 정보를 담기 위해 부여한 자신만의 공간을 로컬 공간(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 |