본문 바로가기

DirectX/[Inflearn_rookiss] Part2: DirectX1235

15. Lighting 기본 개념 Lighting에서 얘기하는 노멀이란? - 점 하나를 잡고 그 점에 속한 평면에서 수직인 벡터를 노멀 벡터라고 한다. 그럼 탄젠트는? - 그 만들어진 평면과 일치하는 방향의 벡터를 의미한다. 1. Diffuse (난반사) - 물체가 빛을 어떻게 받아들이는가에 대한 얘기 - 직각? 비스듬? - 빛의 방향을 나타내는 벡터 L과 점 P의 노멀벡터 N의 각도에 따라 이 픽셀이 빛을 어떻게 받는지 계산해줄 수 있다. - 만약 Diffuse가 (0.5f, 0.5f, 0.5f)일 경우, 위의 두 벡터 L, N이 수직이라면 RGB에 그대로 Diffuse가 가진 값을 곱해주고 - 두 벡터를 내적해서 cos 값을 구한 후 비스듬한 정도에 따라 그 값을 곱해준다 (60도인 경우 cos60'이므로 1/2를 한 값을 곱해주는 .. 2023. 1. 25.
14. Resources & 3D Cube 생성 게임 리소스를 관리하는 Resources 클래스를 구현 - 그리고 모든 오브젝트를 묶어주는 최상위 클래스 Object 구현 enum class OBJECT_TYPE : uint8 { NONE, GAMEOBJECT, COMPONENT, MATERIAL, MESH, SHADER, TEXTURE, END }; enum { OBJECT_TYPE_COUNT = static_cast(OBJECT_TYPE::END), }; - 모든 오브젝트를 OBJECT_TYPE으로 분류해서 Object 클래스로 묶어서 관리 class Object { public: Object(OBJECT_TYPE type); virtual ~Object(); OBJECT_TYPE GetType() { return _objectType; } voi.. 2023. 1. 25.
13. Translation 정리 & Camera 클래스 추가 *인라인 파일(.inl)의 존재 이유? - 인라인 함수의 경우 헤더 파일에 다 구현이 있어야 하는데 그러면 너무 지저분하니까 따로 뺀 것 *라이브러리에서 구현된 벡터는 우리가 직접 만든 벡터보다 float연산에 최적화된 레지스터를 사용한다(SIMD) - 그래서 따로 구현하는 것보다 만들어진걸 쓰는게 더 성능이 좋음 *예제에서 행렬과 관련된 계산은 SimpleMath 라이브러리에서 지원해주는 함수를 통해 사용함 - 역행렬, 전치행렬 등 행렬연산에 필요한 여러 헬퍼함수들이 많이 준비되어 있음 - 이 라이브러리에서 주의할 점은 오른손좌표계 기준으로 되어있다보니 Forward가 -Z방향을 가리킴(즉, Backward가 Look) Transform이 가진 좌표는 월드좌표? - 항상 월드를 기준으로 나타내는게 아니.. 2023. 1. 24.
12. Projection, Screen 변환 행렬 투영 변환이란? - View 좌표계를 Projection 좌표계(NDC)로 변환하는 것 - 원근투영, 직교투영이 있으며 원근투영을 주로 사용 Near과 Far의 개념 near과 fat는 z축에 위치하며, 그 사이 범위의 z값을 가진 물체들을 카메라로 표현한다 - 카메라 각도는 FOV(Field Of View), 화각이라고도 불린다. - 유니티 엔진에서는 이 화각을 변경할 수 있다. - 투영 좌표계에서는 모든 것을 비율로 생각한다. - Z값, 즉 얼마나 카메라에서 멀리 떨어져있냐가 관건 카메라 각도가 90도라면? X = X/Z Y = Y/Z 비례식에 따라 Z값을 X, Y 각각에 나눠주면 된다. - a는 알 수 있으므로 비례식을 통해 b도 구할 수 있다. 그대로 늘리면? - NDC 좌표계의 정사각형 물체를 .. 2023. 1. 23.