본문 바로가기

전체 글330

16. Lighting 구현 Light 클래스 구현 - LightColor -> diffuse, ambient, specular 세 요소를 가진 구조체 - LightInfo -> LightColor, 위치, 방향, 라이트 타입, 범위, 각도를 가진 구조체 - LightParams -> 라이트의 개수, 패딩, LightInfo의 배열을 가진 구조체 -> 이 구조체는 오브젝트가 렌더링되기 전에 씬의 오브젝트를 다 긁어와서 -> 라이트를 다 LightInfo의 배열의 요소로 집어넣은 후 한번에 쉐이더에 전달됨 그러므로 쉐이더 코드에서 이 LightParams를 받아주게 되는데, 그러면 그 코드에서도 같은 형식을 맞춰줘야 함 struct LightColor { float4 diffuse; float4 ambient; float4 specu.. 2023. 1. 26.
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.