webgl入门系列(5)——半兰伯特Half Lambert光照模型

    科技2026-01-18  13

    只需要在上一节的基础上加上一个半兰伯特计算系数

    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); } `

    源码地址:

    https://gitee.com/niuge8905/webglsample

    Processed: 0.011, SQL: 9