Здесь читаем немного здесь об этом.
Фактически текстура с плавающей запятой - это текстура, в которой данные имеют тип с плавающей запятой :) То есть не зафиксированы.Так что, если у вас есть 3.14f в вашей текстуре, вы будете читать одно и то же значение в шейдере.
Вы можете создавать их с разным количеством каналов.Также вы можете создать 16 или 32-битные текстуры в зависимости от формата.например,
// create 32bit 4 component texture, each component has type float
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 16, 0, GL_RGBA, GL_FLOAT, data);
, где данные могут быть такими:
float data[16][16];
for(int i=0;i<16*16;++i) data[i] = sin(i*M_PI/180.0f); // whatever
, тогда в шейдере вы можете получить точно такое же (если вы используете текстуру FLOAT32) значение.
например
uniform sampler2D myFloatTex;
float value = texture2D(myFloatTex, texcoord.xy);
Если вы использовали 16-битный формат, скажем, GL_RGBA16F, то всякий раз, когда вы читаете в шейдере, у вас будет преобразование.Итак, чтобы избежать этого, вы можете использовать тип half4: значение half4 = texture2D (my16BitTex, texcoord.xy);
Таким образом, в основном, разница между нормализованной текстурой 8 бит и плавающей запятой заключается в том, что в первом случае ваши значениябудет переведен в диапазон [0..1] и зафиксирован, тогда как в последнем случае вы получите ваши значения как есть (кроме преобразования 16 <-> 32, см. мой пример выше).
Не то чтобы вы 'Возможно, вы захотите использовать их с FBO в качестве цели рендеринга, в этом случае вам нужно знать, что не все форматы могут быть присоединены в качестве цели рендеринга.Например, вы не можете прикрепить форматы яркости и яркости.
Также не все оборудование поддерживает фильтрацию текстур с плавающей запятой, поэтому вам нужно сначала проверить это для вашего случая, если вам это нужно.
Надеюсь, это поможет.