12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /**
- * Computes the size of a pixel in meters at a distance from the eye.
- * <p>
- * Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel.
- * </p>
- * @name czm_metersPerPixel
- * @glslFunction
- *
- * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.
- * @param {float} pixelRatio The scaling factor from pixel space to coordinate space
- *
- * @returns {float} The meters per pixel at positionEC.
- */
- float czm_metersPerPixel(vec4 positionEC, float pixelRatio)
- {
- float width = czm_viewport.z;
- float height = czm_viewport.w;
- float pixelWidth;
- float pixelHeight;
- float top = czm_frustumPlanes.x;
- float bottom = czm_frustumPlanes.y;
- float left = czm_frustumPlanes.z;
- float right = czm_frustumPlanes.w;
- if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0)
- {
- float frustumWidth = right - left;
- float frustumHeight = top - bottom;
- pixelWidth = frustumWidth / width;
- pixelHeight = frustumHeight / height;
- }
- else
- {
- float distanceToPixel = -positionEC.z;
- float inverseNear = 1.0 / czm_currentFrustum.x;
- float tanTheta = top * inverseNear;
- pixelHeight = 2.0 * distanceToPixel * tanTheta / height;
- tanTheta = right * inverseNear;
- pixelWidth = 2.0 * distanceToPixel * tanTheta / width;
- }
- return max(pixelWidth, pixelHeight) * pixelRatio;
- }
- /**
- * Computes the size of a pixel in meters at a distance from the eye.
- * <p>
- * Use this version when scaling by pixel ratio.
- * </p>
- * @name czm_metersPerPixel
- * @glslFunction
- *
- * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.
- *
- * @returns {float} The meters per pixel at positionEC.
- */
- float czm_metersPerPixel(vec4 positionEC)
- {
- return czm_metersPerPixel(positionEC, czm_pixelRatio);
- }
|