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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值