진행과정 기록/GameEngine

후... 이걸 완성하려고 달리다보니 글 쓸 시간도 없었다. boost 라이브러리를 활용해 파일로 클래스를 입출력 할 수 있게 되었기 때문에, 다음과 같은 구조를 만들어 주었다. class FileIO { public: template static void Save(Ty_ t, std::string filename); template static void Load(Ty_& data, std::string filename); }; template inline void FileIO::Save(Ty_ t, std::string filename) { std::ofstream out(filename); boost::archive::text_oarchive oArchive(out); oArchive > data; }..
현재 렌더링은 매 프레임마다 Rendering Data를 받아와서 Rendering을 진행하도록 하고 있다. Rendering Data에는 모델링 정보, Transform, Material의 이름 정보를 받아왔다. 그리고 queue에 집어넣고 렌더링을 수행하면서 팝팝팝.. 너무 느린 것 아니니. 아예 렌더러에서 Scene에 있는 데이터를 참조하여 자동으로 계속 그려내도록 하는게 빠를 것 같다. 그러려면 Scene 내부에서 Renderer가 붙은 녀석들에 대해서 Renderer가 알도록 해주어야 한다. 현재 렌더링을 수행함에 있어서 Grid는 Texture가 필요없으며, Ai 모델링은 텍스쳐를 필요로 한다. 텍스쳐가 필요한지 아닌지는 Material을 보고 Renderer가 판단한다. InputLayout..
2월이 끝나가는데 개발 진척이 너무 더디다. 이제 UI까지 만들었으니 그래픽 수준을 올려보도록 하자. 먼저 Input 처리부터 해주고... 에러는 Debug Assertion Failed! vector subscript out of range 라고 떴고, 검색을 해보니 vector에 저장된 것 보다 더 큰 인덱스 값을 참조하려고할 때 문제가 된다고 한다. 그래서 input 클래스에서 vector를 사용하는 친구들을 찾아봤다. 키보드에서 생기는 문제니까 키보드를 봤는데, 예전에 bitset 벡터가 문제를 일으키는 것 같았다. 코드를 보니까 벡터의 사이즈를 지정만 해놓고, 원소를 추가 해주질 않았었다. 그러니까 capacity는 5인데 size가 0이라서 생기는 문제였다. 그래서 다음과 같이 초기화해서 집어..
오늘은 2의 날이다. 오늘은 2의 날이다. 어 왜 2번 써지지? 어 왜 2번 써지지? 음... 왠지 서글퍼진다. 열심히 뭔갈 만들어도 자랑할 곳이 없다. 아싸의 인생이 원래 이렇지만.. 어제에 이어 CameaComponent도 InspectorUI를 만들어주었다. Camera::Camera(GameObject* gameObject) : Component("Camera", gameObject) { INSPECTOR_PROPERTY("bool", "IsPerspective", &camOption.isPerspective); INSPECTOR_PROPERTY("float", "Field Of View", &camOption.fov); INSPECTOR_PROPERTY("float", "AspectRatio",..
이제 아픈 것도 다 나았고, 오늘 와이파이 상태도 나쁘지 않은 듯 하다. 어서 Scene Graph를 구현하고, 모델 select를 구현한 후 컴포넌트를 출력할 수 있도록 해보자. 저번에 Picking을 구현해보긴 했지만 아직 Sphere만 가능하고 모델링 선택은 불가능하다. 그리고 모델링 선택을 구현하려면 카메라 공간에 있는 물체를 대상으로만 체크할 수 있도록 해야해서 어떤게 카메라 범위 내에 있는지 체크해줄 Frustum culling 작업을 수행해주어야 한다. 그러니까 이 작업은 좀 보류하고, 일단 UI로 선택했을 때 Inspector 창이 나올 수 있도록 하는게 우선일 것 같다. 그러면 저번에 만든 Node 를 가지고 Scene Graph를 만들어야 하는데, 이 Node로 저장하는 방식의 문제점은..
아프기도 하고... 이펙트 공부도 하고... 그러다보니 제대로 진행을 못하고 있었다. 현재 삼각형과 광선의 교차를 판정하는 부분에서 막혀가지고 sphere와 광선에 대해서만 체크를 할 수 있도록 되어있다. 이건 결국 물리쪽이니 좀 나중에 하는 게 좋을 것 같다... 선형대수학 강의를 처음부터 보고 있는데 용어가 너무 어려워서 잘 못하겠다. 행교환이 어떻고 닷 프로덕트 열분해..이런 한자쓰면서 얘기하면 머리가 아파진다. 오히려 영어가 더 편한 것 같다.. 아무튼, 오늘은 간단하게 지금까지 한 것에 대해서 코드를 좀 정리해보도록 한다. 외부 라이브러리를 사용하다보면, 그 라이브러리를 사용하기 위해서 단 하나의 헤더파일만 포함시켜주면 그 기능을 모두 사용할 수 있었다. 나도 매번 헤더파일을 만들면서 필요한 헤..
오늘은 머리도 아프고 컨디션이 별로라 별거 안하고 Node Tree를 한번 만들어서 ImGui로 출력해 보았다. 아직 GameObject랑 호환되게는 안했는데, 이유는 GameObject가 Node를 상속하는 구조를 갖도록 하고 싶어서 재설계를 할 계획때문이다. 이걸 쓰기 위해서 Node 클래스를 따로 제작해주었다. template으로. //*노드 템플릿 클래스. parent는 하나, child는 복수 개 가질 수 있는 구조. //*pData T*를 std::unique_ptr로 저장 template class Node { public: Node(T* pData, std::string name = "default") : pData(std::unique_ptr(pData)), name(name), pare..
Directx::XMFLOAT3 이런 녀석들은 뭐 계산좀 하려고 하면 일일이 XMVECTOR로 변환해서 사용해야해서 짜증나서 그냥 내가 Vector 클래스를 만들기로 했다. 뭐.. 그냥 손 많이 가는 노가다니까 따로 설명은 하지 않는다. 헤더파일의 모습은 이렇게 되어있다. #pragma once class Vector { public: Vector(float x = 0) : x(x) {} Vector(const class Vector2& v); Vector(const class Vector3& v); //Vector& operator=(const Vector& v); Vector& operator+(const Vector& v); Vector& operator-(const Vector& v); Vecto..
gohen
'진행과정 기록/GameEngine' 카테고리의 글 목록