Cube
높이가 h, 깊이가 d, 넓이가 w일 때
육면체의 중앙이 원점에 있을 때 꼭지점의 좌표들을 계산할 수 있음
=>
육면체 정면 좌표
(-w, h, -d) / (w, h, -d)
(-w, -h, -d) / (w, -h, -d)
위와 같이 뒷면 좌표들도 구하면 된다
Sphere
원점으로 부터 r만큼 떨어진 위에 북극점, 아래에 남극점을 찍음
북극점에서 남극점으로 내려오면서 원의 표면에 일정한 간격으로 점을 찍어둔다
각 점들을 위층, 아래층 점들과 삼각형으로 이어 구와 비슷한 형태를 만들 수 있음
점이 많을 수록 구와 비슷해진다.
Obejct 클래스
컴포넌트, 리소스, 게임 오브젝트의 최상위 클래스
enum class OBJECT_TYPE : uint8
{
NONE,
GAMEOBJECT, // PREFAB
COMPONENT,
MATERIAL,
MESH,
SHADER,
TEXTURE,
END
};
오브젝트로 관리될 클래스들
Resources 클래스
object 클래스들을 관리하는 매니저 클래스
리소스 => 메쉬, 메테리얼, 쉐이더: 파일
게임 오브젝트 => 프리팹, 블루프린트: 파일
컴포넌트 => 스크립트: 파일
class Resources
{
DECLARE_SINGLE(Resources)
public:
template<typename T>
shared_ptr<T> Load(const wstring& key, const wstring& path);
template<typename T>
bool Add(const wstring& key, shared_ptr<T> object);
template<typename T>
shared_ptr<T> Get(const wstring& Key);
template<typename T>
OBJECT_TYPE GetObjectType();
...
private:
using KeyObjMap = std::map<wstring, shared_ptr<Object>>;
array<KeyObjMap, OBJECT_TYPE_COUNT> _resources;
};
파일들은 파일 경로를 통하여 add나 load 시 맵에 등록해서 캐싱.
템플릿 함수의 경우 헤더에 선언 후 구현을 cpp에 하면
기본적으로는 컴파일 시 에러가 뜬다
=>
cpp 파일에 명시적으로 템플릿의 자료형을 써서 정의 해두거나
헤더 파일에 구현 (많아질 시 inl 파일을 만들어 거기서 구현)