只需要在上一节的基础上加上一个半兰伯特计算系数
float hLambert=nDotL*0.5+0.5;
总体的着色器代码:
const VSHADER=`
varying vec3 v_Normal;
void main(){
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
//计算变换后的法向量并归一化
v_Normal=normalize(vec3(normalMatrix*normal));
}
`
const FSHADER=`
precision mediump float;
uniform vec3 u_LightColor;
uniform vec3 u_LightDirction;
uniform vec3 u_AmbientLight;
varying vec3 v_Normal;
uniform vec3 u_Color;
void main(){
//计算光线方向和法向量的点积
float nDotL=dot(v_Normal,u_LightDirction);
//半兰伯特参数
float hLambert=nDotL*0.5+0.5;
//计算漫反射光的颜色
vec3 diffuse=u_LightColor*u_Color.rgb*hLambert;
//计算环境光产生的反射光的颜色
vec3 ambient=u_AmbientLight*u_Color.rgb;
//将以上两者相加作为最终的颜色
gl_FragColor=vec4(diffuse+ambient,1.0);
}
`
源码地址: