DSDSWeb/static/js/Cesium-1.53/Source/Shaders/Builtin/Functions/unpackFloat.glsl

31 lines
943 B
Plaintext
Raw Normal View History

2024-07-11 18:02:47 +08:00
#define SHIFT_RIGHT_8 0.00390625 //1.0 / 256.0
#define SHIFT_RIGHT_16 0.00001525878 //1.0 / 65536.0
#define SHIFT_RIGHT_24 5.960464477539063e-8//1.0 / 16777216.0
#define BIAS 38.0
/**
* Unpacks a vec4 value containing values expressable as uint8 to an arbitrary float.
*
* @name czm_unpackFloat
* @glslFunction
*
* @param {vec4} packedFloat The packed float.
*
* @returns {float} The floating-point depth in arbitrary range.
*/
float czm_unpackFloat(vec4 packedFloat)
{
packedFloat *= 255.0;
float temp = packedFloat.w / 2.0;
float exponent = floor(temp);
float sign = (temp - exponent) * 2.0;
exponent = exponent - float(BIAS);
sign = sign * 2.0 - 1.0;
sign = -sign;
float unpacked = sign * packedFloat.x * float(SHIFT_RIGHT_8);
unpacked += sign * packedFloat.y * float(SHIFT_RIGHT_16);
unpacked += sign * packedFloat.z * float(SHIFT_RIGHT_24);
return unpacked * pow(10.0, exponent);
}