광원을 표현하려면 세가지의 광원을 합쳐줘야한다

- Ambient lighting: 어두운 때일지라도 일반적으로 world의 어딘가엔 어떠한 조명이 존재(달, 멀리 떨어져 있는 조명)하므로 오브젝트는 대부분 완전히 어두워지지 않는다. 이를 위해 항상 어느정도 밝기를 유지하도록 ambient 조명 상수를 사용한다.

이녀석은 어느정도 쉽고직관적이다.
조명이 여러 반사광들로 인해서 빛을 수직으로 맞지않는 부분도 어느정도 보이게 해주기위해 모든 면을 밝게해준다.
- Diffuse lighting: 조명 오브젝트가 가지고 있는 방향이 있는 조명을 오브젝트에 비추어 밝힌다. 오브젝트의 많은 부분이 광원을 마주보고 있을수록 더 밝아진다.

이것도 그리 어렵지않다. norm 이 전 포스팅에서 다뤘다시피 법선벡터이고
lightDir 은 조명의 위치에서 프라그먼트 즉 면의 위치를 빼서 벡터를 만들어 광원의 벡터를 만들어준다.
그리곤 dot_product , 즉 그 두 벡터의 내적을 구해 각도를 구한다.
- Specular lighting: 반사 하이라이트라고 보면된다.
'개인공부 > C++ Graphics' 카테고리의 다른 글
| OpenGL # 18 Tessellation Shader (0) | 2025.01.21 |
|---|---|
| OpenGL #16 법선벡터(VN)와 라이팅 (1) | 2025.01.18 |
| OpenGL #15 Translation, Transformation, Transpose (0) | 2025.01.17 |
| OpenGL #14 Projection - MVP(3/3) (0) | 2025.01.17 |
| OpenGL #13 Projection (2/3) (0) | 2025.01.16 |