Мой первый пост здесь, извините, если я нарушаю какие-либо нормы / правила. Итак, моя цель состоит в том, чтобы закодировать float (который находится в диапазоне 0-1) в RGB (24-битный) текстурный / кадровый буфер. (Я не могу использовать какой-либо другой формат из-за технических ограничений.)
Я нашел эту технику кодирования: http://marcodiiga.github.io/encoding-normalized-floats-to-rgba8-vectors
И, похоже, она работает довольно хорошо (по крайней мере, стабильно по сравнению сдругие схемы кодирования), но она распространяет информацию на 32 бита (RGBA). Я не могу понять, как переписать его так, чтобы он кодировал / декодировал в 24 бит (RGB). (Математика, стоящая за этим, вроде как приходит в голову. Я пытался удалить части формулы, например, уменьшив vec4s до vec3s, но, похоже, это искажает результаты из-за способа его кодирования, независимо от того, что я делаю. )
Было бы замечательно любое направление / подсказка в этом отношении.
vec4 packFloatToVec4i(const float value) {
const vec4 bitSh = vec4(256.0*256.0*256.0, 256.0*256.0, 256.0, 1.0);
const vec4 bitMsk = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0);
vec4 res = fract(value * bitSh);
res -= res.xxyz * bitMsk;
return res;
}
float unpackFloatFromVec4i(const vec4 value) {
const vec4 bitSh = vec4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1.0);
return(dot(value, bitSh));
}