1.大气模糊shader
https://blog.csdn.net/srk19960903/article/details/78734238
2.卡通shader
https://blog.csdn.net/srk19960903/article/details/69071400
3.菲涅尔反射shader
https://zhuanlan.zhihu.com/p/38548428 //算法
https://codepen.io/mysisi/details/xYNWNZ/ //代码
<script id="vertexShader" type="x-shader/x-vertex">
varying vec3 vNormal;
varying vec3 vPositionNormal;
void main()
{
vNormal = normalize( normalMatrix * normal ); // 转换到视图空间,vNormal的normalMatrix为模型矩阵的逆矩阵的转置 (法线方向)
vPositionNormal = normalize(( modelViewMatrix * vec4(position, 1.0) ).xyz); //理解了,转换到视图空间,相机是原点了,他看向物体得方向向量就是等于物体在视图空间的坐标 (视线方向)
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
<!-- fragment shader a.k.a. pixel shader -->
<script id="fragmentShader" type="x-shader/x-vertex">
uniform vec3 glowColor;
uniform float b;
uniform float p;
uniform float s;
varying vec3 vNormal;
varying vec3 vPositionNormal;
void main()
{
float a = pow( b + s * abs(dot(vNormal, vPositionNormal)), p );
gl_FragColor = vec4( glowColor, a );
}
</script>