Direct3D에서 지원하는 광원들1. 주변광원(ambient light) : 3차원 공간 내에서 메시의 배치나 위치와는 전혀 상관없이 똑같은 양으로 모든 곳을 비추는 빛의 강도를 말한다. 방향과 위치가 없으며, 색깔과 강도만 존재한다.
디바이스 -> SetRenderState(D3DRS_AMBIENT, 색)
2. 점 광원(point light)
: 직관적으로 가장 쉽게 생각할 수 있는 빛이다. 예를 들면, 백열전구를 생각하면 된다. 광원의 위치, 방향에 따라 빛의 강도가 달라진다.
3. 방향성 광원(directional light)
: 모든 광원의 방향이 하나의 방향을 갖는 것으로 완벽하지는 않지만 태양을 예로 들 수 있다. 광원의 위치는 상관없고, 방향이 가장 중요한 요소다
4. 점적 광원(spot light) : 정해진 위치와 범위에만 비추는 특수한 조명을 말한다. 은히 영화나 쇼 무대에서 사용하는 점적 광원 조명을 생각하면 된다.
주의) 위의 광원 모델들은 HLSL이나 정점셰이더, 픽셀 셰이더를 사용하게 되면 모두 무용지물이 된다.
위의 광원은 D3DLIGHT9 구조체를 통해서 정해지게 된다.
typedef struct _D3DLIGHT9 {
D3DLIGHTTYPE Type;
D3DCOLORVALUE Diffuse;
D3DCOLORVALUE Specular;
D3DCOLORVALUE Ambient;
D3DVECTOR Position;
D3DVECTOR Direction;
float Range;
float Falloff;
float Attenuation0;
float Attenuation1;
float Attenuation2;
float Theta;
float Phi;
} D3DLIGHT9;
위의 Type 값으로 광원의 종류를 결정한다.
(
D3DLIGHT_POINT, D3DLIGHT_SPOT, D3DLIGHT_DIRECTIONAL )