블로그 이미지
대갈장군

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2007. 11. 16. 01:21 OpenGL

OpenGL을 사용하면서 조명을 사용할 경우 알아둬야 할 몇가지 중요한 포인트가 있다.


단순히 예전에는 빛을 켜면 걍 물체의 현재 색상, 즉 파란공이면 파랗게 빨강공이면 빨간색으로 나올줄 알았다. 무식한 발상이 아닐 수 없다.


OpenGL에서는 물체가 어떤 색으로 나타나게 될지를 결정하는 두가지 중요한 요소가 있으니 바로 조명의 색상과 물체의 반사색 이다.


조명의 색상이 중요한 것은 당연지사. 파란불이 비추어지면 물체가 흰색이라해도 푸르스름할 것이고 만약 물체가 빨간색이라면 광학 원리상 물체는 빨간색 빛 이외에는 다 흡수하므로 파란 색 빛을 다 흡수하여 검은 물체로 보여질 것이다.


다음으로 물체의 반사색인데 내가 물체의 vertex 마다 어떤 색상을 지정했건 간에 glMaterial*() 함수를 이용해 물체의 반사색을 다른 걸로 설정하면 그 정의된 색으로 입사하는 빛을 반사한다는 것이다.


또한 OpenGL에는 3가지 빛의 속성을 설정 가능한데 우선 주변광 (ambient light)로써 이것은 우리 주위에 은근히 존재하는 빛을 말한다. 형광등에서 나온 빛이 온 방을 환하게 하는 그런 분위기의 빛이다.


다음으로 분산광인데 (diffuse light) 이것은 반사되어 퍼져나가는 색상을 말한다. 이 색상이 바로 물체의 색상을 결정짓는데 가장 큰 역활을 한다. 현실과 유사하게 만들기 위해서는 조명의 주변광은 적게 주고 조명의 분산광은 적당한 색으로 주고 (흰색에 가깝게)  물체의 분산광을 자신이 원하는 색상으로 만들면 물체가 자신이 원하는 색상으로 나타나게 만든다.


그리고 마지막 빛으로 반사광(specular light)인데 반사광이라기보단 highlighting 색상이 더 쉽게 이해될것 같다. 즉 물체에 입사하는 빛을 강하게 (분산광처럼 퍼져나가는 빛이 아니라) 반사하는 색상을 말한다. 은이나 금 같은 물체에 빛을 비추면 일부분이 강하게 반사되면서 눈이 부시게 되는 현상이 나타나는데 바로 그 부분의 색상을 결정하는 것이다. 이것은 당연히 들어오는 빛의 색을 반사하는 것이 현실과 유사하므로 주로 입사광의 색상을 따라간다.


마지막으로 한가지 중요한 사실은 내가 원래 설정한 물체의 색상, 즉 각 vertex마다 설정한 색상을 그대로 보여주기 위해서는 두가지 방법이 있다.


1) 빛을 설정하지 않는다. 조명을 설치하지 말라는 말. 그러면 원래 색상이 그대로 나옴

2) 만약 조명을 설치했다면 glEnable(GL_COLOR_MATERIAL)을 활성화 시켜서 물체의 색상이 나오도록 한다.

개인적으로 2번이 더 쉽다고 생각되는데 처리 시간이 1번보다 더 걸릴것으로 예상된다.



'OpenGL' 카테고리의 다른 글

OpenGL Rendering Context v.s. Windows Device Context  (0) 2009.03.12
Oh my god... 이게 사진이 아니라고?  (0) 2008.01.18
glRasterPos와 glWindowPos  (1) 2007.12.01
Stencil Buffer의 사용법  (6) 2007.09.22
OpenGL  (0) 2007.09.19
posted by 대갈장군