我正在处理一些可能具有大量值的数据,而数据本身很重要。
看到的最高数字是“89,482”。所以最初我打算使用unsigned int。
然而,在usigned int格式中使用这些数字会引起一些麻烦,即在OpenGL着色器中操作它们。
基本上,如果我可以使用浮点数,事情会简单得多。
但是我并不完全理解将这样的数字存储为浮点数的影响。特别是在OpenGL情况下,我没有选择存储单通道32位浮点纹理,只有16位。
对于16bit浮动维基百科州:
整数值的精度限制
0到2048之间的整数可以精确表示 2049年到4096年之间的整数轮到2的倍数(偶数)
4097和8192之间的整数轮到4的倍数 8193和16384之间的整数轮到8的倍数 16385和32768之间的整数舍入为16的倍数 32769和65519之间的整数舍入为32的倍数 等于或大于65520的整数四舍五入为“无穷大”。
所以这简单地意味着在数字“89,482”的情况下,试图将它存储在16位OpenGL纹理中它将被舍入到无穷大?如果是这样,我的选择是什么?坚持使用unsigned int?那么当我需要将它标准化时,我可以投射浮动吗?
- EDIT ---
我需要在着色器中取消标准化值