1.一种反射效果:
片元着色器代码
fragmentShaderSource:`in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));vec3 positionToEyeEC = -v_positionEC;czm_material material = czm_getMaterial(materialInput);float flowMapOffset0 = 20.0;float flowMapOffset1 = 20.0;float halfCycle = 0.15 * 0.5;float scale = 1.0;float reflectivity = 0.02;vec3 toEye = normalize( positionToEyeEC );vec2 flow = czm_lightDirectionEC.xy;flow.x *= - 1.0;// sample normal maps (distort uvs with flowdata)vec4 normalColor0 = vec4(normalEC,1.0);vec4 normalColor1 = vec4(normalEC,1.0);// linear interpolate to get the final normal colorfloat flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;vec4 normalColor = mix( normalColor0, normalColor1, flowLerp );// calculate normal vectorvec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );// calculate the fresnel term to blend reflection and refraction mapsfloat theta = max( dot( toEye, normal ), 0.0 );float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );// calculate final uv coordsvec3 coord = materialInput.str;vec2 uv = v_st;out_FragColor = vec4( vec3(51.0/255.0,204.0/255.0,204.0/255.0), 1.0 ) * reflectance ;}`