我已經成功地裝彩車與值[0,1],而無需使用丟失過多精度:如何將3浮點(空間向量)打包爲4個字節(像素)?
byte packedVal = floatVal * 255.0f ; // [0,1] -> [0,255]
然後,當我想解開packedVal回的浮動,我簡單地做
float unpacked = packedVal/255.0f ; // [0,255] -> [0,1]
工作正常,只要浮標在0和1之間。
現在,這裏是真正的交易。我試圖將一個三維空間矢量(3 float
組件)變成4個字節。我這樣做的原因是因爲我正在使用紋理來存儲這些向量,每個向量有1個像素。它應該是像一個「法線貼圖」,(但不完全這樣,你就會明白爲什麼在跳轉後)
所以有,每個像素代表了3D空間向量。如果值非常紅,則法向矢量的方向大部分是+ x(向右)。
所以當然,法線是正常化的。所以他們不需要幅度(縮放)矢量。但我試圖存儲一個矢量任意幅度,每個像素1個矢量。因爲紋理具有組件(rgba),我想在w組件中存儲縮放矢量。
任何其他關於將任意大小的3個空間矢量打包成4個字節的像素顏色值(例如x,y,z每個大小的上限爲200左右)?