opengl 조명 예제

광원은 주파수의 단일 분포를 제공하지만 주변, 확산 및 스페큘러 구성 요소가 다를 수 있습니다. 예를 들어 빨간색 벽이 있는 방에 흰색 표시등이 있는 경우 직접 눈에 띄는 오브젝트가 흰색이더라도 산란된 라이트는 빨간색인 경향이 있습니다. OpenGL을 사용하면 라이트의 각 구성 요소에 대해 빨간색, 녹색 및 파란색 값을 독립적으로 설정할 수 있습니다. 오브젝트의 법선에 따라 광원을 기준으로 방향이 결정됩니다. 각 정점에 대해 OpenGL은 할당된 법선에 따라 특정 정점이 각 광원에서 받는 빛의 양을 결정합니다. 이 예제에서 구의 법선은 glutSolidSphere() 루틴의 일부로 정의됩니다. 법선 정의 방법에 대한 자세한 내용은 2장의 “법선 벡터”를 참조하십시오. 첫 번째 – 그리고 가장 기본적인 – 결정은 조명을 활성화할지 여부입니다. glLight*()에 대한 모든 매개 변수와 가능한 값은 다음 섹션에서 설명합니다. 이러한 매개변수는 특정 장면의 전체 조명 모델과 오브젝트의 재질 특성을 정의하는 매개변수와 상호 작용합니다. 이 두 항목에 대한 자세한 내용은 “조명 모델 선택” 및 “재료 특성 정의”를 참조하십시오. “조명 수학”은 이러한 모든 매개 변수가 수학적으로 상호 작용하는 방법을 설명합니다.) 원하는 라이트의 특성을 정의한 후에는 glEnable() 명령을 사용하여 라이트를 켜야 합니다.

또한 OpenGL을 준비하여 조명 계산을 준비하려면 GL_LIGHTING을 사용하여 glEnable()를 매개 변수로 호출해야 합니다. 자세한 내용은 “조명 활성화”를 참조하십시오. 조명 계산은 전면 또는 후면 에 관계없이 모든 다각형에 대해 수행됩니다. 일반적으로 전면 다각형을 염두에 두고 조명 조건을 설정하기 때문에 일반적으로 뒷면이 있는 다각형은 제대로 조명되지 않습니다. 개체가 구인 예제 5-1에서는 구 의 외부에 있는 면이기 때문에 앞면만 볼 수 있습니다. 따라서 이 경우 뒷면 다각형이 어떻게 생겼는지는 중요하지 않습니다. 그러나 내부 표면이 보이도록 구를 잘라낼 경우 정의한 조명 조건에 따라 내부 서피스가 완전히 켜지도록 할 수 있습니다. 뒷면에 대해 다른 재질 설명을 제공할 수도 있습니다. OpenGL 조명 모델로 양면 조명을 켜면 재질의 색상이 반사되는 빨간색, 녹색 및 파란색 광원의 백분율에 따라 달라진다는 근사치가 됩니다. 예를 들어, 완벽하게 빨간 공은 들어오는 모든 빨간 빛을 반사하고 그것을 치는 모든 녹색과 파란색 빛을 흡수합니다.

이러한 공을 흰색 광선(동일한 양의 빨간색, 녹색 및 파란색 표시등으로 구성)으로 보면 모든 빨간색이 반사되고 빨간색 공이 표시됩니다.