Jestem obecnie zajęty z odroczonym cieniowaniem w webgl i muszę rozszyfrować 3 wartości całkowite (w zakresie [0..256] = 256^3) do jeden 32-bitowy float i zakodować go później. ponieważ jest to dla WebGL, trzeba to zrobić bez operacji bitowych. precyzja nie jest dla mnie ważna (ale można to osiągnąć, myślę).dekodowanie wartości rgb do pojedynczego float bez przesunięcia bitowego w glsl
To jest to, co mam, ale myślę, że to jest złe ze względu na precyzję tekstury, w której przechowuję zakodowaną wartość.
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; }
dzięki ..
myślę, że mieszają się znaczenia słowa „kodują” i „dekodowania” ... – Tara