12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #ifdef LOG_DEPTH
- // 1.0 at the near plane, increasing linearly from there.
- out float v_depthFromNearPlusOne;
- #ifdef SHADOW_MAP
- out vec3 v_logPositionEC;
- #endif
- #endif
- vec4 czm_updatePositionDepth(vec4 coords) {
- #if defined(LOG_DEPTH)
- #ifdef SHADOW_MAP
- vec3 logPositionEC = (czm_inverseProjection * coords).xyz;
- v_logPositionEC = logPositionEC;
- #endif
- // With the very high far/near ratios used with the logarithmic depth
- // buffer, floating point rounding errors can cause linear depth values
- // to end up on the wrong side of the far plane, even for vertices that
- // are really nowhere near it. Since we always write a correct logarithmic
- // depth value in the fragment shader anyway, we just need to make sure
- // such errors don't cause the primitive to be clipped entirely before
- // we even get to the fragment shader.
- coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w;
- #endif
- return coords;
- }
- /**
- * Writes the logarithmic depth to gl_Position using the already computed gl_Position.
- *
- * @name czm_vertexLogDepth
- * @glslFunction
- */
- void czm_vertexLogDepth()
- {
- #ifdef LOG_DEPTH
- v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0;
- gl_Position = czm_updatePositionDepth(gl_Position);
- #endif
- }
- /**
- * Writes the logarithmic depth to gl_Position using the provided clip coordinates.
- * <p>
- * An example use case for this function would be moving the vertex in window coordinates
- * before converting back to clip coordinates. Use the original vertex clip coordinates.
- * </p>
- * @name czm_vertexLogDepth
- * @glslFunction
- *
- * @param {vec4} clipCoords The vertex in clip coordinates.
- *
- * @example
- * czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0));
- */
- void czm_vertexLogDepth(vec4 clipCoords)
- {
- #ifdef LOG_DEPTH
- v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0;
- czm_updatePositionDepth(clipCoords);
- #endif
- }
|