| 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);}
 |