我在XNA上編寫代碼,只能訪問着色器模型3,因此沒有位移運算符。我需要將兩個隨機的16位浮點變量(意思是不在[0,1]範圍內,而是任意隨機浮點變量)打包成兩個8位變量。無法對它們進行標準化。將16位浮點變量打包成兩個8位變量(又名一半兩字節)
我曾考慮過手動執行位移,但是我找不到一篇關於如何將隨機十進制浮點數(不是[0,1])轉換爲二進制文件並返回的好文章。 謝謝
我在XNA上編寫代碼,只能訪問着色器模型3,因此沒有位移運算符。我需要將兩個隨機的16位浮點變量(意思是不在[0,1]範圍內,而是任意隨機浮點變量)打包成兩個8位變量。無法對它們進行標準化。將16位浮點變量打包成兩個8位變量(又名一半兩字節)
我曾考慮過手動執行位移,但是我找不到一篇關於如何將隨機十進制浮點數(不是[0,1])轉換爲二進制文件並返回的好文章。 謝謝
這不是一個好主意 - 16位浮點數的範圍和精度已經非常有限。請記住,8位只會給您留下256個可能的值!
在着色器中獲取一個8位值是微不足道的。作爲一種顏色是一種方法。您可以將每個通道用作歸一化範圍,從0到1.
當然,你說你不想規範化你的值。所以我假設你想維持寬泛範圍內漂亮的浮點特性,精度更接近於零。
(現在將閱讀floating-point一些背景信息的好時機,尤其是關於half-precision floating-point和minifloatsand microfloats。)
的一種方式做到這一點是使用logarithm and an exponent(編碼和解碼你的價值觀編碼,分別)。這基本上就是浮點格式本身的功能。確切的數學將取決於你所期望的精度和範圍 - (你將代表256個值) - 所以我將把它作爲一個練習。
說實話,我已經差不多以分數和模(%)做出了。高字節值爲256/256,低值爲%256。解碼只是高* 256 +低。它在mah excel工作表中工作,但它不能在程序中工作:)。我猜這是兩件事情之一: a)因爲我得到我的價值作爲一個浮動而不是一半和 b)因爲我的價值可能是負面的。 – cubrman