게임제작기법연구 13

게임제작기법연구 15주차

Quaternion에서 회전 행렬을 만드는 방법을 정리하고 이를 구현한 코드를 첨부하시오. 사원수의 회전 식 $q_1\cdot q_2 =(w_1w_2-(v1\cdot v2), w_1v_2+w_2v_1 + v_1\times v_2)$ $\quad \space \space \space \space \space \space =(-(\vec{v_1}\cdot \vec{v_1}),(\vec{v_1}\times \vec{v_1}))$ 실수부를 통일 시키지 않고 위 식을 적용하면 실수부가 다르므로 다른 공간에 존재 하게 됨. $v' = qvq^* = v + wt + v\times t$ 그러므로 위 식을 이용해서 실수부를 통일시켜야 합니다. $v' = q(0, 1, 0, 0)q^*$ $\quad = (w + xi + ..

게임제작기법 연구 14주차

사원수는 왜 체가 성립되지 않는지 기술하시오. 우선 위의 이유를 알려면 우선 체의 성질부터 알아야 합니다. 체의 성질 1. 덧셈에 대해 교환, 결합, 분배 법칙이 성립한다. 2. 곱셈에 대한 교환, 결합, 분배 법칙이 성립한다. 3. 덧셈의 항등원 0, 곱셈의 항등원 1이 존재한다. 4. 덧셈의 역원 -a, 곱셈의 역원 a^{-1}이 존재한다. 두 사원수 곱의 결과를 벡터와 내적으로 유도 유도 하기 전에 실수부와 허수부를 합친 q에 대해 알아야합니다. $q=w+xi+yj+zk=(w,\vec{v})$ 또한, 허수의 공식도 알아야 합니다. $i^2=j^2=k^2=ijk=-1$ $ij=k, jk=i, ki=j$ 이제 임의의 두 사원수$(q_1, q_2)$의 곱의 결과를 연산해보겠습니다. $q_{1} \cdot..

게임제작기법연구 13주차

평면의 방정식을 유도하고 d의 의미를 정리하시오. 평면의 방정식 $P = ax+by+cz+d = 0$ 1. 평면에 노멀 벡터 N을 하나 만들어줍니다. 2. 평면 위에 두 점 P0, P를 지정해 줍니다. 3. P0 - P를 해서 벡터를 하나 만들어 줍니다. 4. 노멀 벡터 N와 P0 - P는 서로 직교합니다. 5. 내적 정의에서 $cos \theta$를 사용하므로 직교할 때 0이 됩니다. $N \cdot (P_0 - P) = 0$ $N \cdot (P_0 - P) = (a, b, c) \cdot (x - x_0, y - y_0, z - z_0)$ $= a(x - x_0) + b(y - y_0) + c(z - z_0)$ $= ax + by + cz - (ax_0 + by_0 + cz_0) = 0$ 결론 : ..

게임제작기법연구 12주차

백페이스 컬링 과정과 외적 공식에 대해 정리하고, 이를 구현한 결과를 첨부하시오. 백페이스 컬링(BackFace Culling) - 렌더링 시 최적화 방법 중 하나로 카메라에 보이지 않는 뒷면의 폴리곤을 제거하는 기법입니다. 컬링 과정 1. 꼭짓점에서 두 벡터를 가져온다. $edge1 = vertices[1] - vertices[0]$ $edge2 = vertices[2] - vertices[0]$ 2. 교차 하는 지점의 법선 벡터를 구한 뒤 정규화 합니다. $faceNormal = edge \cdot edge2$ 3. 내적을 통해 법선 벡터 및 카메라의 방향을 구합니다. $faceNormal.Dot(CamForward)$ 벡터의 외적과 내적 - 외적과 내적의 가장 큰 차이점은 외적은 벡터이고, 내적은 ..

게임제작기법연구 11주차

새롭게 구축할 3D 공간에 대한 설명 Y-up Right Handed Coordinate(오른손 좌표계) X axis의 용도 : 좌,우 구분(Pitch) Y axis의 용도 : 위,아래 구분(Yaw) Z axis의 용도 : 앞,뒤 구분(Roll) 3D Rotation에 대한 고찰 회전이란 공간 변환의 관점에서 어떤 행동인지 기술하시오 - 물체가 아닌 공간이 돌아가는 것.(월드 공간이 아닌 해당 물체가 속한 공간이 회전하는 것) - 변환 후 각 벡터의 크기가 1이여야 함. - 각 벡터가 서로 직교해야 함. 3D 회전을 위해 Yaw/Roll/Pitch를 값을 따로 저장하는 이유를 설명하시오. - 메모리를 아끼기 위해(Matrix보다 Float가 모든 변환에 있어서 값이 더 저렴하기때문) 각 축에 대한 회전 ..

게임제작기법연구 10주차

복소수의 기본 성질을 정리하시오 우선 복소수란 실수와 허수를 이용해서 만든 수이며 a+bi 꼴로 표현됩니다. i(Imaginary Unit)의 특성 $i^2 = -1$ 복소수의 덧셈 연산, 곱셈 연산, 각 연산의 항등원과 역원 - 덧셈에 대한 항등원 = 0, 곱셈에 대한 항등원 = 1 - 덧셈 연산 = (a+bi)+(c+di) = (a+c)+(b+d)i - 덧셈에 대한 역원은 -를 붙여주면 되므로 -a-bi - 곱셈 연산 = (a+bi)*(c+di) = (ac-bd)+(ad+be)i - 곱셈에 대한 역원은 허수의 영역이라 정의 될 수 없으며, 대신 켤레복소수를 이용해 역원을 정의할 수 있다. - $z\cdot \frac{1}{z} = 1, \frac{1}{z} = \frac{1}{a+bi} = ?$ 복소..

게임제작기법연구 8주차

QuadTree란. 위 사진과 같이 부모 노드가 자식 노드를 4개 씩 가지고 있는 트리구조이며, 우리가 흔히 사분면이라 부르는 2차원 직교좌표평면을 그대로 1, 2, 3, 4사분면으로 나눈 것이라 보면 된다. 만약 물체가 2개 이상의 사분면에 걸치지 않았을 경우에는 그 물체가 있는 사분면(예를들어 1사분면이라 해보자)을 다시 4등분으로 나누어서 2개 이상의 사분면에 걸칠 때 까지 분할한다. 이 트리의 장점은 내 생각엔 크기가 아무리 거대한 지형이라도 탐색하는 속도는 매우 빠를것이라고 생각한다. (계속 4개의 자식노드로 분할하여 탐색하기 때문에) QuadTree의 클래스 구조 #pragma once enum Sect { NW = 0, NE = 1, SW = 2, SE = 3, NONE }; class Qu..

게임제작기법연구 7주차

[SoftRenderer 구현 및 검토] 현재 프로젝트에서 여러 게임 오브젝트를 구현하십시오. GameObject2D.h #pragma once class GameObject2D { public: GameObject2D() = default; GameObject2D(const Mesh* InMeshPtr) : _MeshPtr(InMeshPtr) { } GameObject2D(std::string name, const Mesh* InMeshPtr) : _name(name), _MeshPtr(InMeshPtr) {} Transform2D& GetTransform() { return _Transform; } const Mesh* GetMesh() { return _MeshPtr; } FORCEINLINE bo..

게임제작기법연구 6주차

GameEngine 구조를 구성하기 위해 각각 GameObject, Resource라는 필수 핵심 클래스를 관리하는 해당 컨테이너를 선택하십시오. 그 이유는 전체 게임 엔진 프로세스 중에 각 중요한 함수 호출에서 발생한 실제 작업 (단일 항목 검색, 삽입 / 삭제, 트래버스)을 기반으로해야합니다. STL map, unordered_map, Vector의 장단점 및 특징은 지난 포스팅에 블로깅 되어있습니다. 에디터작업(삽입삭제 빈번) -> 저장 -> 씬로딩-> 리소스로딩 -> 루프 (Update, Drawcall) 게임오브젝트 : Vector를 선택했습니다. 그 이유는 렌더링 처리를 하려면 다 돌아야 하는데 특정 물체를 집어서 가는게 아니라 처음부터 끝까지 다 돌아야 하기 때문입니다. 그렇기 때문에 삽입,..

게임제작기법연구 5주차

Affine Combination에 대해 설명하시오. 아핀조합이란 점+점 = 점 이 유일한 조건을 뜻한다. 각 점에 스칼라를 곱한 후 더해주는 것으로 각 점 X와 Y에 스칼라 a, b를 곱해주면 aX + bY = 점 으로 결과가 나오며 이 때 a+b = 1이 나오는 경우이다. a+b = 1 이므로, b = 1-a로 바꿀 수 있으며 aX + (a-1)Y = 점이 된다. 단 모든 계수의 합이 1일 때 닫혀있다(점) 라고 한다. BaryCentric Coorinate에 대해 설명하시오 무게중심이라고 부르며, 각 스칼라 값을 따로 모아서 좌표를 비교하는 것으로. 즉 (a, b)가 되며, 그것을 무게중심 좌표라고 부른다. BaryCenter = 새롭게 두 점을 덧셈으로 조합해서 새롭게 생성 된 점 Barycent..