В настоящее время я занят отложенным затенением в 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; }
спасибо ..