목록2024/09 (13)
개발하는 리프터 꽃게맨입니다.
GameObjectManager (가칭)전체 순회, 삽입, 삭제, 탐색 속도가 매우 빠른 컨테이너입니다.제목은 GameObjectManager 라고 지었는데, GameObject를 관리하기 위한 컨테이너 쯤으로 불러도 괜찮습니다.이름에서 볼 수 있듯 게임 오브젝트를 관리하기 위해서 만든 특별한 자료구조입니다.게임에서 가장 빈번히 일어나는 작업 중 하나는 컨터이너의 순회입니다. 보통 게임 오브젝트들은 매 틱마다 자신의 고유의 일을 수행하기 위해 Update 혹은 Tick 이라는 함수를 수행합니다. 그러기 위해서는 컨테이너에 수많은 오브젝트들을 저장하여 전체 순회를 통해서 상태를 갱신하는 설게를 사용할 수 있습니다. 그러므로 컨테이너의 순회는 1초에 최소 60번은 발생하며, 순회의 속도는 게임의 성능을 판가..
1. 오브젝트는 이중으로 관리 1) 빠른 삽입, 삭제, 탐색을 위한 해쉬 테이블 2) 빠른 순회를 위한 오브젝트 벡터, 빠른 삭제를 위해 특수한 형태의 벡터를 사용함 2. 해쉬 테이블 키 : 오브젝트의 ID (ID는 uint64 이며 유일하다.) 값 : std::pair (배열의 인덱스, 오브젝트의 unique_ptr) 3. 벡터 단순한 일자형 벡터 캐쉬 히트가 높아서 순회속도가 빠르다. 4. 탐색 해쉬 테이블을 통한 탐색 5. 삽입 해쉬 테이블을 통한 삽입 -> O(1) 배열에 추가적으로 삽입하고 배열의 인덱스를 해쉬 테이블에 업데이트 -> O(1) 이 때 push_back을 사용하면 안됨 벡터의 맨 뒤 인덱스를 얻어냄 해당 인덱스의 요소가 nullptr면 대입 해당 인덱스의 요소가 nullptr가 아..
#include #include #include #include struct TypeID{ bool operator==(const TypeID& other) const { return ID == other.ID; } size_t ID = {};};namespace std{ template struct hash { size_t operator()(const TypeID& typeID) const { return std::hash{}(typeID.ID); } };}class TypeInfoBase{protected: static TypeID InstTypeID() { Ty..
#include using namespace std;templatestruct StringHashHelper{ char String[N]; size_t Hash; size_t Size = N; constexpr StringHashHelper(const char(&str)[N]) { for (size_t i = 0; i struct StringHash{ char String[Helper.Size]; size_t Hash = Helper.Hash; constexpr StringHash() { for (size_t i = 0; i
주의책이랑 다른 내용이 굉장히 많습니다.현대 DX와 책과 다른 부분이 많고.. 책에는 설명이 난해하게 된 부분이 있어서 의역이 다수 존재합니다. 이전 챕터에서는 주로 렌더링 파이프라인의 개념적 및 수학적 측면에 초점을 맞췄다. 이번 챕터에스는 Direct3D 인터페이스와 메서드를 사용하여 렌더링 파이프라인을 구성하고버텍스 쉐이더, 픽셀 쉐이더를 정의하고, 기하 데이터를 렌더링 파이프라인에 제출하여 그리는 바법에 중점을 둔다. 이 챕터를 끝내면, 색상 또는 와이어프레임 모드로 다양한 기하학적 도형을 그릴 수 있게 될 것이다. Vertices와 입력 레이아웃Driect3D의 버텍스는 위치 외에도 추가 데이터를 포함할 수 있다.사용자 정의 버텍스를 위해서는 먼저 우리가 선택한 버텍스 데이터를 포함하는 구조체를..