#D+4 게임 엔진

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

게임 엔진

목록 보기
4/5

Game Engine 개발기 +4일

목표

  • Component 자료구조 설정 및 구현
  • File Load & Save 구현

1. Component 자료구조 설정 및 구현

  • Component 자료구조 설정

  1. Component 종류
    1. Scene ( 장면 )
    2. 대사
    3. 카메라
    4. 오브젝트
    5. 쉐이더
    6. 오디오
  2. Component 종류에 따른 필요한 값들
    1. Scene ( 장면 )
      • 해당 Scene에 들어가는 객체들에 대한 전체 정보를 지니고 있어야 함
    2. 대사
      • 단순 Text 파일
    3. 카메라
      • 현재 위치( Trasformation )
      • 현재 각도( Rotation )
      • 현재 초점( Focus )
      • 현재 초점과의 거리 ( Distance )
    4. 오브젝트
      • 현재 위치 ( Transformation )
      • 현재 각도 ( Rotation )
      • 현재 크기 ( Scale )
      • 현재 텍스쳐 ( Texture )
        - 단순 Color인 경우, 제외
        • Image를 입힐 경우
    5. 쉐이더
      • 쉐이더 소스 파일 위치 ( HLSL file Path )
    6. 오디오
      • 아직 ....
  3. Component 간의 구별
    1. UUID를 활용
    2. 단순 name을 비교
      • 중복된 name의 경우, 비교 불가
    3. Type으로 비교
      • 동일 Type 내의 중복된 name의 경우, 비교 불가
  4. Component 구현
struct Component
{
	UUID ID;
    std::string Name;
    TYPE Type;
};

std::map < Component, void* > ComponentData;
1. UUID를 기본으로 비교함
2. 하지만, map에는 Key : UUID와 매칭될 모든 객체들의 포인터가 동일하게 들어가야 함
	1. 모든 객체들의 조상 인터페이스의 포인터를 사용
    2. map에서 Key를 UUID와 Type 정보를 가진 객체,
    	value에는 해당 객체 포인터를 void 포인터로 형변환
        그 후에, 해당 Type에 맞춰서 void 포인터를 객체 포인터로 변환시켜서 사용
    3. 일단은 2번으로 선택하였음
3. 아니면, map에 Key : UUID와 매칭될 객체를 찾는 것이 주된 목표이기 때문에,
	Value : void* or Parent* + Type 으로 구성된 객체를 설정하는 것도 괜찮을 듯
4. UUID를 Key 값으로 사용하게 되면, 나중에 Rendering을 진행하기 위해,
	Object 정보가 필요할 때에도 UUID를 사용해야 한다면, 매우 불편할 수 있다.
5. Set을 이용하여서, 중복된 UUID가 없는지 확인하고,
	map에 Key는 Type, Value에는 각 Type에 해당하는 Vector를 넣는 것으로 구현해보자
profile
빨리 매미 소리가 크게 들리는 여름이 왔으면 좋겠다.

0개의 댓글