opengl 광원 예제

이것은 우리가 마지막 기사에서 구현 한 확산 구성 요소와 동일합니다, 우리는 밝기 대신 light.ambientCoefficient를 사용하는 것을 제외하고 (현재 확산Coefficient라고). glDrawArrays 또는 glDrawElements를 사용하여 프리미티브를 그리는 경우 glColorPointer를 사용하여 지정된 대로 원형의 정점의 색상 값을 색상 배열에서 가져온 다음을 기억하십시오. (하위 섹션 3.4.2 참조). 재질 특성에 대해 유사한 배열이 없습니다. 그러나 조명을 사용하는 동안 색상 배열을 사용하고 GL_COLOR_MATERIAL도 활성화된 경우 색상 배열이 색상을 추적하는 재질 속성 값의 소스로 사용됩니다. 광원에 대한 설정의 좋은 세트는 광원의 색상과 주변을 동일한 색상으로 확산 및 스페큘러 구성 요소를 설정하는 것입니다 – 그러나 훨씬 감소 된 강도에서, 10 % ~ 40%는 대부분의 경우 합리적인 것 같다. RGBA 방정식의 분산 및 반사 용어로 시작합니다. 분산 항에서 분산등 * 확산 재질 대신 색 색 인덱스 모드의 이전 섹션에 정의된 대로 dci를 대체합니다. 마찬가지로, 스페큘러 용어에서 스페큘러 라이트 * 반사 물질 대신 이전 섹션에 정의된 대로 sci를 사용합니다. (감쇠, 스포트라이트 효과 및 이전과 같은 이러한 용어의 다른 모든 구성 요소를 계산합니다.) 이러한 수정된 확산 및 반사 용어 d와 s를 각각 호출합니다. 이제 s`= min{ s, 1 }을 한 다음 톱코트가 빛을 반사할 때 광선이 페인트 레이어에 닿지 않는 방법을 계산합니다.

일반적으로 페인트 레이어는 강도의 일부를 흡수하여 빛의 색상을 변경하지만, 빛이 페인트에 충돌하지 않는 경우 는 일어날 수 없습니다. 즉, 스페큘러 구성 요소는 일반적으로 분산 구성 요소와 다른 색상입니다. 대부분의 반사 표면은 아무것도 흡수하지 않으며 모든 빛을 반사하므로 반사 색상이 흰색이 됩니다. 페인트가 빨간색임에도 불구하고 자동차의 반짝이는 부분이 흰색인 이유입니다. GL_LIGHT_MODEL_TWO_SIDE는 양면 조명을 켜는 데 사용됩니다. 다각형에는 두 세트의 재료 특성, 앞면 재질 및 후면 재질이 있을 수 있습니다. 기본값인 양면 조명이 꺼져 있으면 전면 재질만 사용됩니다. 다각형의 전면과 뒷면 모두에 사용됩니다. 또한 두 면에 동일한 법선 벡터가 사용됩니다. 이러한 벡터는 앞면에서 가리키거나 적어도 가리키기 때문에 뒷면에 대한 올바른 결과를 제공하지 않습니다. 실제로 뒷면은 다각형 앞에 놓인 광원에 의해 조명되는 것처럼 보이지만 뒷면은 다각형 뒤에 있는 라이트에 의해 조명되어야 합니다.

빛 구조체에는 감쇠와 주변효율의 두 가지 새로운 요소가 있습니다. 감쇠 변수는 문서의 앞에서 감쇠 섹션에서 본 $$k$$ 값입니다. 주변코효율 변수는 주변 구성 요소에 사용할 라이트의 백분율이며 이 문서의 앞에서 설명합니다. 모든 라이트의 기본 위치는 (0,0,1,0)이며, z축의 양수 방향에서 z축의 음수 방향으로 빛나는 방향 라이트를 나타냅니다.