OpenGL学习随笔(十)

在OpenGL中要使用光照分为四个步骤,

1、启用光照
2、启用光源,光源数量受硬件限制
3、设置光源属性
4、设置物体材质属性

可见光照相关的属性比较多,要想理解各种光照效果,

了解其内部数学计算公式是必要的,在此之上辅之一些实际例子,以有更直观效果,加深理解。

从渲染输出的角度来说,光照的各种属性影响的是最后像素输出的颜色,即像素输出颜色由光照方程决定。这个方程redbook上说的还比较清楚(redbook 第4版 p147有个错误,在第5版已经修正),但总的来说还是specification更清晰一些。

看这些数学公式时的一些感触:

1、从公式上看像素颜色由三部分决定,三部分之间是加关系,内部是乘法关系。
       a.顶点的发射光颜色(glMaterialfv(GL_EMISSION, ...))
       b.全局环境光(glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ...)作用于顶点(glMaterialfv(GL_AMBIENT, ...))的效果
       c.各光源(glLightfv(xxx, ...)作用于顶点(glMaterialfv(xxx, ...))的效果

2、要注意通过OpenGL API配置的光照属性是向量还是点。我自己在分析聚光效果时,一直把GL_SPOT_DIRECTION理解为一个点,结果自然是被OpenGL输出的实际效果搞晕了。而在看了specification,看到公式里的那个单位向量符号(^)之后才顿悟。
3、公式计算结果被截取到[0, 1]区间。
4、向量点乘结果为标量,表示两向量在方向上的差异程度;向量叉乘结果为向量,用于求法线。


现实中的光照远比此复杂,OpenGL在效果与性能上做了折中,但即便如此场景中的光源数量对性能仍有较直接的影响。


猜你喜欢

转载自blog.csdn.net/ison81/article/details/3797341