Programing/DirectX

Direct3D에서 지원하는 광원들

챠니쓰 2008. 5. 8. 21:42

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 )