전체 글 63

게임제작기법 연구 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$ 결론 : ..

1차 정리된 데모

구현 방법 1. 오브젝트들을 각 종류마다 List로 설정한 후 거리 별로 Sorting 해준다. List jelly = new List(); List block = new List(); List coin = new List(); jelly.AddRange(GameObject.FindGameObjectsWithTag("jelly")); block.AddRange(GameObject.FindGameObjectsWithTag("block")); coin.AddRange(GameObject.FindGameObjectsWithTag("coin")); jelly.Sort(delegate (GameObject a, GameObject b) { return Vector3.Distance(transform.positio..

게임프로젝트 2020.06.30

게임제작기법연구 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} = ?$ 복소..

게임제작기법연구 9주차

WorldTransform에서 지정한 부모에 상대적인 LocalTransform으로 변환하는 과정을 정리하기. 변환에는 Scale, Rotation, Position 가 존재합니다.. Scale은 자신의 World Scale 값을 부모의 World Scale 값에 나누면 됩니다. Rotation은 자신의 World Rotation에서 부모의 World Rotation 값을 빼주면 됩니다. Position은 자신의 World Position에 부모의 World Matrix의 역함수를 곱하면 됩니다. 예를들어 위치값(1,1,1)에 Rotation(20, 0, 0)에 Scale값이 4인 Parent란 객체와 위치값(5,5,5)에 Rotation(10, 0, 0)에 Scale값이 1인 Child란 객체가 있습니..

카테고리 없음 2020.06.09

게임제작기법연구 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..