0

我在 XNA 上编码并且只能访问着色器模型 3,因此没有位移运算符。我需要将两个随机的 16 位浮点变量(意味着不在 [0,1] 范围内,而是在任何 RANDOM FLOAT VARIABLE 范围内)打包成两个 8 位变量。没有办法使它们正常化。

我考虑过手动进行位移,但我找不到一篇关于如何将随机十进制浮点数(不是 [0,1])转换为二进制并返回的好文章。谢谢

4

1 回答 1

0

这并不是一个好主意——16 位浮点数的范围和精度已经非常有限。请记住,8 位只剩下 256 个可能的值!

将 8 位值放入着色器是微不足道的。因为颜色是一种方法。您可以将每个通道用作标准化范围,从 0 到 1。

当然,你说你不想标准化你的价值观。因此,我假设您希望以更接近于零的精度保持大范围的良好浮点属性。

(现在是阅读有关浮点的一些背景信息的好时机。尤其是关于半精度浮点minifloats 和 microfloats的信息。)

一种方法是使用对数和指数对值进行编码(分别进行编码和解码)。这基本上正是浮点格式本身所做的。确切的数学将取决于您想要的精度和范围——(你将代表哪 256 个值?)——所以我将把它留作练习。

于 2013-07-25T16:16:18.003 回答