декодировать значение rgb в одиночное число с плавающей запятой без битового сдвига в glsl

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

спасибо ..

6
задан mskfisher 11 May 2012 в 13:45
поделиться