Share via


Light 속성(Direct3D 9)

광원 속성은 광원의 유형과 색을 설명합니다. 사용하는 조명의 유형에 따라 조명에 감쇠 및 범위 속성 또는 스포트라이트 효과 속성이 있을 수 있습니다. 그러나 모든 유형의 조명이 모든 속성을 사용하는 것은 아닙니다. Direct3D는 D3DLIGHT9 구조를 사용하여 모든 유형의 광원에 대한 조명 속성에 대한 정보를 전달합니다. 이 섹션에는 모든 광원 속성에 대한 정보가 포함되어 있습니다. 정보는 다음 그룹으로 나뉩니다.

위치, 범위 및 감쇠 속성은 월드 공간에서 조명의 위치, 조명에서 방출된 빛이 원거리에서 어떻게 동작하는지 정의합니다. C++에서 사용하는 모든 광원 속성과 마찬가지로 이러한 속성은 조명의 D3DLIGHT9 구조에 포함됩니다.

조명 감쇠

감쇠는 범위 속성에서 지정한 최대 거리를 향하는 동안 조명의 강도가 감소하는 방법을 제어합니다. 세 개의 D3DLIGHT9 구조체 멤버는 감쇠0, 감쇠1 및 감쇠2의 광원 감쇠를 나타냅니다. 이러한 멤버에는 0.0부터 무한대까지의 부동 소수점 값이 포함되어 조명 감쇠를 제어합니다. 일부 애플리케이션은 Attenuation1 멤버를 1.0으로 설정하고 나머지를 0.0으로 설정하여 1/D로 변경되는 밝기 강도를 생성합니다. 여기서 D는 광원에서 꼭짓점까지의 거리입니다. 최대 밝기 강도는 광원에 있으며 조명 범위에서 1/(조명 범위)로 줄어듭니다. 일반적으로 애플리케이션은 Attenuation0을 0.0으로, Attenuation1을 상수 값으로, Attenuation2를 0.0으로 설정합니다.

감쇠 값을 조합하면 더욱 복잡한 감쇠 효과를 낼 수 있습니다. 또는 일반 범위를 벗어난 값으로 설정하여 더욱 독특한 감쇠 효과를 만들어낼 수 있습니다. 하지만 음의 감쇠 값은 허용되지 않습니다. 감쇠 및 스포트라이트 계수(Direct3D 9)를 참조하세요.

조명 색

Direct3D의 조명은 시스템의 조명 계산에서 독립적으로 사용되는 세 가지 색, 즉 확산 색, 주변 색, 반사 색을 방출합니다. 각각의 색은 Direct3D 조명 모듈에서 통합되며 현재 재질의 대응 모듈과 상호 작용하여 렌더링에 사용되는 최종 색을 만들어냅니다. 확산 색은 현재 재질의 확산 반사율 속성과 상호 작용하고, 반사 색은 재질의 반사 반사율 속성과 상호 작용하는 방식 등으로 이루어집니다. Direct3D가 이러한 색을 적용하는 방법에 대한 자세한 내용은 조명 수학(Direct3D 9)을 참조하세요.

C++ 애플리케이션에서 D3DLIGHT9 구조체에는 확산, 앰비언트 및 반사 색의 세 멤버가 포함되어 있으며, 각 멤버는 내보내는 색을 정의하는 D3DCOLORVALUE 구조체입니다.

시스템의 계산에 가장 많이 적용되는 색 유형은 확산 색입니다. 가장 일반적인 확산 색은 흰색(R:1.0 G:1.0 B:1.0)이지만 원하는 효과를 내는 데 필요한 색을 만들어낼 수 있습니다. 예를 들어 빨간색 빛을 벽난로에 사용하거나 녹색 빛을 "진행"으로 설정된 교통 신호등에 사용할 수 있습니다.

일반적으로 빛 색 구성 요소를 0.0 ~ 1.0(끝 값 포함) 범위의 값으로 설정할 수 있지만 이는 요구 사항이 아닙니다. 예를 들어 모든 구성 요소를 2.0으로 설정하여 "흰색보다 밝은" 조명을 만들 수 있습니다. 이 유형의 설정은 상수 이외의 감쇠 설정을 사용할 때 특히 유용할 수 있습니다.

Direct3D는 조명에 RGBA 값을 사용하지만 알파 색 구성 요소는 사용되지 않습니다.

일반적으로 재질 색은 조명에 사용됩니다. 그러나 재질 색(발광 색, 주변 색, 확산 색 및 반사 색)이 확산 또는 반사 꼭짓점 색으로 재정의되도록 지정할 수 있습니다. 이 작업은 SetRenderState 를 호출하고 다음 표에 나열된 디바이스 상태 변수를 설정하여 수행됩니다.

디바이스 상태 변수 의미 Type 기본값
D3DRS_AMBIENTMATERIALSOURCE 주변 재질 색을 가져올 위치를 정의합니다. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE 확산 재질 색을 가져올 위치를 정의합니다. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE 반사 재질 색을 가져올 위치를 정의합니다. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE 발광 재질 색을 가져올 위치를 정의합니다. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX 꼭짓점 색을 사용하거나 사용하지 않도록 설정합니다. BOOL TRUE

 

알파/투명도 값은 항상 확산 색의 알파 채널에서만 나옵니다.

안개 값은 항상 반사 색의 알파 채널에서만 나옵니다.

D3DMATERIALCOLORSOURCE에는 다음 값이 있을 수 있습니다.

  • D3DMCS_MATERIAL - 재질 색이 원본으로 사용됩니다.
  • D3DMCS_COLOR1 - 확산 꼭짓점 색이 원본으로 사용됩니다.
  • D3DMCS_COLOR2 - 반사 꼭짓점 색이 원본으로 사용됩니다.

조명 방향

조명의 방향 속성은 월드 공간에서 물체 이동에 따라 방출되는 빛의 방향을 결정합니다. 방향은 방향성 조명과 스포트라이트에서만 사용되고 벡터로 설명됩니다.

조명 의 D3DLIGHT9 구조체의 Direction 멤버에서 조명 방향을 설정합니다. 방향 멤버는 D3DVECTOR 형식입니다. 방향 벡터는 장면에서 조명의 위치와 상관없이 논리적 원점으로부터의 거리로 설명됩니다. 따라서 양의 z축을 따라 장면에 직접 비추는 스포트라이트는 정의된 위치와 관계없이 <0,0,1>의 방향 벡터를 갖습니다. 마찬가지로 방향이 <0,-1,0>인 방향성 조명을 사용하여 장면에 바로 비치는 햇빛을 시뮬레이션할 수 있습니다. 물론 좌표 축을 따라 빛나는 조명을 만들 필요가 없습니다. 값을 혼합하고 일치하여 더 흥미로운 각도에서 빛나는 조명을 만들 수 있습니다.

참고

조명의 방향 벡터를 정규화할 필요는 없지만 항상 크기가 있다는 점에 유의해야 합니다. 즉, <0,0,0> 방향 벡터를 사용하지 마세요.

 

조명 위치

밝은 위치는 D3DLIGHT9 구조체의 Position 멤버에서 D3DVECTOR 구조를 사용하여 설명합니다. x,y-및 z 좌표는 월드 공간에 있는 것으로 간주됩니다. 방향성 조명은 위치 속성을 사용하지 않는 유일한 조명 유형입니다.

조명 범위

조명의 범위 속성은 월드 공간에서 장면의 메시가 더 이상 해당 물체에서 방출되는 빛을 받아들이지 않는 거리를 결정합니다. Range 멤버에는 세계 공간에서 조명의 최대 범위를 나타내는 부동 소수점 값이 포함되어 있습니다. 방향성 조명은 범위 속성을 사용하지 않습니다.

조명 및 재질