光照
2020-04-17 本文已影响0人
tp夕阳武士
1.光照基础
OpenGL 提供了基本的光照情况():
- 发射光 :由发光体自身发光
- 环境光照 :没有起点,没有方向,包围着物体
- 漫反射光照 :类似素描,光来自某个方向,然后在物体表面形成反射,有明面,暗面
- 镜面光照 :光来自一个特定的方向,然后在物体表面以一个特定的方向反射;

如上图所示:
- ambient 就是环境光照的效果
- diffuse 就是漫反射光照效果
- specular 就是镜面光照效果
- combined(Phong) 是混合光照效果;
2.材质属性
- 泛射材质 : 反射率很高
- 漫反射材质 : 需要考虑入射角,反射角
- 镜面反射材质 : 有斑点,光晕
- 发射材质 : 材质本身就有光
3.光照计算
3.1环境光
公式:环境光 = 光源的环境光颜色 * 物体的材质颜色
-
环境光的颜色:
image.png
-
物体材质的颜色:
物体材质的颜色可以通过纹理对应的纹素来取得;
3.2发射光计算
公式:发射颜色 = 物体的反射材质颜色
光照的比较

3.3. 漫反射光的计算



如上图4-3所示,有效的光照方向与物体表面的法线夹角应该是0°-90°之间的,
法线: 表示垂直于物体表面的一个垂直线,初中数学概念;
公式:
漫反射颜色 = 光源的漫反射颜色 * 物体的漫反射材质颜色 * DiffuseFactor
DiffuseFactor 表示漫反射因子;
DiffuseFactor = max(0,dot(N,L));
N: 法向量
L:入射光向量;
漫反射因子 = 取最大值(0,点乘(光源向量 * 物体表面法向量));
点乘的计算如果忘记,可以查阅:OpenGL-向量 & 矩阵;

3.4镜面光的计算

镜面光计算公式:
镜面反射颜色 = 光源的镜面光颜色 * 物体的镜面材质颜色 * SpecularFactor;
SpecularFactor = power(max(0,dot(N,H)),shininess);
H: 视线向量E与光线向量L的半向量;
dot(N,H):H,N的点积几何意义,平方线与法线夹角的cos值
shininess : 高光的反射强度度; 由开发者指定;
光照计算公式:
光照颜色 = (环境颜色 + 漫反射颜色 + 镜面颜色) * 衰减因子;
衰减因子的计算:

3.5 聚光灯因子



平行光
所有光线来源都是平行的
点光源
由一个发光点发出的光