如何在glsl中执行位操作?
使用常规的C风格的位运算符|,&,^,或!不能正常工作.
我目前正忙于webgl中的延迟着色,我需要将3个整数值(在[0..256] = 256 ^ 3范围内)解码为单个32位浮点数并稍后对其进行编码.因为这是针对WebGL的,所以必须在没有按位操作的情况下完成.精确度对我来说并不重要(但我认为可以实现).
这是我所拥有的,但我认为这是错误的,因为我存储编码值的纹理的精度.
float packColor(vec3 color) { return (color.r + (color.g*256.) + (color.b*256.*256.)) / (256.*256.*256.); }
vec3 decodeColor(float f) {
float b = floor(f * 256.0);
float g = floor(f * 65536.0) - (b*256.);
float r = (floor(f * 16777216.0) - (b*65536.)) - (g*256.);
return vec3(r, g, b)/ 256.0;//vec3(r, g, b) / 256.0; }
Run Code Online (Sandbox Code Playgroud)
谢谢..