[1]. 빛 연산을 해본다.
[2]. Engine 프로젝트에, Utility 필터에, Light 라는 빛 필터를 하나 추가해놓고, 거기에 Light 라는 base 상속 클래스와, 그 Light 클래스를 관리해주는 Light_Manager 클래스를 만들어 주자.
[3]. Light 함수는, 말 그대로 광원을 생성해주는 클래스이다. 예전 Dx9시절에 조명 연산 관한 작업을 했을 당시에는, 아예 DirectX 자체적으로 빛의 정보를 담고 있는 구조체가 지원되었었는데, Dx11 부터는 또 없어서, 직접 Engine_Struct.h 에 빛 정보 구조체를 추가해서 넣어주자.
[4]. 이 구조체에는,
들을 담는다.
[5]. 본격적인 코드 작성 전에, 빛 연산의 과정에 대해서 서술하자면, 빛 연산 즉 광원 연산은, 발사한 빛을 받는 다른 객체들에게의 연산을 뜻한다.
[6]. 광원 종류 타입에는 DIRECTIONAL, POINT, SPOTLIGHT 등 이 있는데, 빛의 종류들이지만, 서로 기능하는 특징들이 다르다.
[7]. 그럼에도 위 광원들이 공통적으로 필요한 정보가 바로 색깔을 담당하는 픽셀값 인 것이다.
[8]. 그 중에서도 vDiffuse 에 관한 빛 연산을 제대로 알아보고자 한다. 먼저 이 빛 연산은, 포워드 셰이더로 작업할 것이고, 빛을 받는, (예를 들어 terrain 이 빛을 받아) 정점의 normal 정보들을 어떻게 응용해서 셰이딩하는 지를 알아보겠다.
[9]. 먼저 설계는 Light 클래스를 Light_Manager 클래스에서 관리하면서 역시나 GameInstance 클래스를 통해, Client 프로젝트에서 m_pGameInstace 를 통해 Light_Manager 를 통한 Light 생성, 그 외 기능들을 호출하게끔 할 것이다.
[10]. Light 클래스 Create 함수에, 방금 Engine_Struct.h 에 추가해 놓았던, 빛 정보 구조체의 주소를 참조하는 식으로 파라미터로 주자.
[11]. 그리고 Initialize 함수를 호출하면서, 멤버 변수에 구조체를 저장해둔다.
[12]. 이제 Light_Manager 클래스를 작성하는데, 이 클래스는, Light 클래스를 list 로 저장해서 갖고 있을 것이고,