진행과정 기록

이제 아픈 것도 다 나았고, 오늘 와이파이 상태도 나쁘지 않은 듯 하다. 어서 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..
클래스 1. 다른 곳에서 마음대로 접근하고 수정할 수 있는 value인 경우 public으로 선언해도 무방 2. Get, Set 방식에서 값 대입이 아니라 다른 동작을 수행하고 싶은 경우 Property로 선언 3. 함수와 변수는 따로 구분하여 정리. static 변수인 경우 static끼리 정리 4. 클래스 정리 순서는 static public -> public 함수 -> public 변수 -> protected 함수/변수 -> private 함수-> private 변수 ->프로퍼티 GETSET선언 순으로 정리 주석처리방식 1. 함수 설명은 //@desc 함수설명 이런 식으로 항목 작성. 매개 변수에 대한 부연 설명이 필요한 경우 //@(매개변수) 를 사용
Hexagon 도형으로 이루어진 구체를 Blender에서 만든 후, UV를 편다. 그리고 도형들이 각각 분리되어 움직이도록 하기 위해 다 쪼개준 후 들고 온다. 그 후 유니티 Shader Graph를 사용하여 Shader를 만든 후, Shader 제어와 테스팅을 위한 c# 스크립트를 짜서 테스트해봤다. 보다시피 충돌하였을 때 충돌 위치에서 이펙트가 출력되는 것을 볼 수 있다. 이 이펙트의 핵심이라 한다면 normal vector를 활용한 vertexPosition제어, Fresnel 이펙트 노드, SphereMask 노드인 것 같다. 요즘은 유튜브가 스승님인 것 같다. 해당 이펙트는 유튜브를 보면서 만든 것이다. https://youtu.be/hTJqo1HeEOs
렌더링 과정을 개선하였으니 이제 드디어 Picking을 구현해보고자 한다. 음, 피킹에 대한 구현을 하려면 이 기능이 어떤 클래스에게 들어가 있어야 할까? 일단 원리를 알아보자. 마우스 입력으로 2D 좌표를 받은 후, 이를 3d vector로 변환해야 한다. 일단 마우스 좌표는 이미 기능이 있으니, 어떻게 해야 마우스 좌표를 3D로 바꾸느냐가 핵심이겠군. 먼저 마우스 좌표를 그냥 화면 해상도에 따른 좌표공간에 두지 않고, -1~ +1로 일종의 정규화(?)된 공간의 좌표로 변환을 해주어야 한다. 즉 화면 좌표계는 다음과 같은데, (0,0) . . . . . .. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . .(1280, 720) -> 대충 보자;..
어제의 실패 이후 검색을 열심히 해보았지만 뾰족한 수가 떠오르지 않는다. FileManager의 역할에 대해 다시한번 규정해보자. Asset 폴더 내의 모든 인식 가능한 파일을 찾아서 내가 만든 클래스로 만들어서 쓸수 있게 해준다. 만들어진 클래스는 FileManager가 주어진 요청에 따라 그에 맞는 데이터를 내어준다. 원인 분석을 위해 간단한 프로젝트를 만들어서 거기서 실험을 해보았더니, void*에 대한 unique_ptr이 문제를 일으키고 있다는 것을 알았다. class A { public: int a = 1; }; //template //T* Get(void* data, T*& out) //{ //out = static_cast(data); //return out; //} class B { pu..
gohen
'진행과정 기록' 카테고리의 글 목록 (3 Page)