03_高光

高光

最终效果:
在这里插入图片描述

顶点着色器:

uniform vec3 uLightDir;
uniform vec3 uHighlightOffset;
uniform float uHightlightRange;
varying float weight1;
varying float weight2;

void main() {
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
  vec3 lightDir = normalize(uLightDir);

  vec3 objNor = normalize( normalMatrix* normal.xyz);
  vec3 lightNor = normalize(normalMatrix* lightDir.xyz);

  // 渐变纹理
  weight1 = max( dot(lightNor, objNor)*0.5+0.5, 0.0 );

  // 高光
  vec3 offsetNor = normalize(objNor + uHighlightOffset);
  float ret = max(dot(offsetNor, lightNor),0.);
  if(ret > uHightlightRange) {
    weight2 = 1.;
  } else {
    weight2 = 0.;
  }
}

片元着色器:

uniform sampler2D t;
varying float weight1;
varying float weight2;

vec3 lerp (vec3 x, vec3 y, float t ) {
	return (1. - t ) * x + t * y;
}

void main()	{
  vec2 newUV = vec2(weight1, 0.5);
	vec4 color1 = texture2D(t,newUV);

  vec3 heightColor = vec3(1., 1., 1.);
	vec3 finalColor = lerp(color1.xyz, heightColor, pow(weight2, 2.));
	gl_FragColor = vec4(finalColor, 1.);
}`;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值