#D+5 게임 엔진

겨울엔군고구마한잔·2023년 3월 31일
0

게임 엔진

목록 보기
5/5

Game Engine 개발기 +5일

목표

  • Resource( Component ) 리팩토링
  • .obj, .mtl Loader 구현
    - Topology Index 구현

1. Resource( Component ) 리팩토링

  • RTTI ( Run Time Type Information )

  1. RTTI란?
    1-1). 프로그램 실행 중, 실시간으로 객체의 타입을 얻어올 때 사용하는 방법
    1-2). 사용 라이브러리

    • typeInfo
      - typeid 연산자를 사용할 수 있는 라이브러리
      • typeid( 인스턴스 자체 )
      • typeid( 타입 )
  2. RTTI를 사용하기 위한 방법
    2-1). virtual map으로 연결시켜주자

    #include <iostream>
    #include <typeinfo>
    
    class Parent
    {
        public :
            virtual void DoSomething() = 0;
    };
    
    class Child : public Parent
    {
        public :
            virtual void DoSomething()
            {
                // Do Something ...
            }
    };
    
    int main()
    {
        Parent* Value = new Child;
    
        std::cout << typeid( *Value ).name() << std::endl;
        // class Child
        return 0;
    };

    2-2). RTTI를 활용하여서, 다운 캐스팅( 부모->자식 형변환 ) 할 객체를 확실히 한 후에,
    static_cast 을 통하여 형변환을 진행

  • 기존 코드에서의 변경

  1. Resource Manager
    1-1). 기존 map

    • 구조
      - Key : type_info
      - Value : map < UUID, IResource* >
    • 다소 복잡한 형태
      - std::map< const std::type_info, std::map< MyUUID, IResource, MyUUIDCompare >

    1-2). 새 map

    • 구조
      - Key : UUID
      - Value : IResource*

    1-3). Resource Create 시, 기존의 방법 유지 -> template 사용 O
    1-4). Resource Get 시, auto return -> template 사용 X

  2. IResource
    2-1). 기존 IResource

    • 구조
      - 함수
      - Init() : virtual
      - Destroy() : virtual
      - 변수
      - Name : std::string
      - UUID : std::string
      - Type : const type_info*

    2-2). 새 IResource

    • 구조
      - 함수
      - Init() : virtual
      - Destroy() : virtual
      - 변수
      - Name : std::string
      - UUID : std::string
      - Type : const type_info*
profile
빨리 매미 소리가 크게 들리는 여름이 왔으면 좋겠다.

0개의 댓글