光照
OpenGL的光照模型把光分成4种独立的成分:环境光、散射光、镜面光和发射光。
环境光(ambient light)
环境光并不来自任何特定的方向。它来自某个光源,但光线却是在房间或场景中四处反射,没有方向可言。
散射光(diffuse light)
OpenGL的散射光具有方向性,来自于一个特定的方向,它根据入射光线的角度在表面上均匀地反射开来。因此,如果光线直接指向物体表面,它看上去就更亮一些。如果光线是从一个较大的角度照射到物体表面上,它看上去就显得暗一些。
镜面光
和散射光一样,镜面光也具有很强的方向性,但它的反射角度很锐利,只沿一个特定的方向反射。高强度的镜面光趋向于在它所照射的表面上形成的一个亮点,称为镜面亮点。
为了在场景中增加光照,需要执行如下步骤:
1. 定义每个物体的每个顶点的法线向量。这些法线决定了物体相对于光源的方向
2. 创建和选择一个或多个光源,并设置它们的位置
3. 创建和选择一种光照模型,它定义了全局环境光的层次以及观察点的有效位置
4. 定义场景中物体的材料属性
单位法线
物体的法线向量决定了它相对于光源的方向。对于物体的每个顶点,OpenGL使用法线判断这个顶点从每个光源接收的光线数量。为了进行正确的光照计算,表面法线必须为单位