给物体增加光照可以提升场景的立体感,可以用shader实现光照模拟效果.
一般物体光照包括了环境光,漫反射和镜面光,通常光滑的物体可以看到镜面光效果,一般的物体受环境光与漫反射的影响更大一些,环境光可以用一个常量模拟,而漫反射光则是与物体表面法线和光向量的夹角大小有关,夹角大小可以用法向量与光照向量的点乘值表示(此处向量都是经过标准化计算的).
下面给出glsl vs代码:
uniform vec4 lightd;//光照向量
uniform mat4 viewMatrix;//视图矩阵
varying vec3 lightDir,normal;
void main() {
normal = normalize(gl_NormalMatrix * gl_Normal); //在视图空间的法线
lightDir = normalize(vec3(viewMatrix * lightd)); //在视图空间的光线
gl_TexCoord[0] = gl_MultiTexCoord0;//直接取传进来的纹理坐标
gl_Position = ftransform(); //顶点mvp变换
gl_FrontColor = gl_Color;
}
uniform sampler2D tex;//采样器
uniform vec4 amb,dif,matAmb,matDif;//光照与材质属性
varying vec3 lightDir,normal;//在视图空间的