1234567891011121314151617181920212223242526272829 |
- /**
- * Calculates the specular intensity of reflected light.
- *
- * @name czm_getSpecular
- * @glslFunction
- *
- * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.
- * @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates.
- * @param {vec3} normalEC The surface normal in eye coordinates.
- * @param {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.
- *
- * @returns {float} The intensity of the specular highlight.
- *
- * @see czm_phong
- *
- * @example
- * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);
- * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);
- * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);
- */
- float czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess)
- {
- vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC);
- float specular = max(dot(toReflectedLight, toEyeEC), 0.0);
- // pow has undefined behavior if both parameters <= 0.
- // Prevent this by making sure shininess is at least czm_epsilon2.
- return pow(specular, max(shininess, czm_epsilon2));
- }
|