語言爲cg。以8位浮點編碼數據(cg)
我有一個8位浮點數必須介於0和1之間(這是float4 rgba顏色值的'a'分量)。我想存儲一個6位無符號整數和一個2位無符號整數。我怎樣才能安全地將這兩個值存儲在這8位中?
我找不到8位浮點格式的任何文檔,尤其是一個限制在0和1之間的文檔。我假設它比data/255
更復雜?
語言爲cg。以8位浮點編碼數據(cg)
我有一個8位浮點數必須介於0和1之間(這是float4 rgba顏色值的'a'分量)。我想存儲一個6位無符號整數和一個2位無符號整數。我怎樣才能安全地將這兩個值存儲在這8位中?
我找不到8位浮點格式的任何文檔,尤其是一個限制在0和1之間的文檔。我假設它比data/255
更復雜?
OpenGL標準保證寫入8位幀緩衝區時至少保留256個不同的值。我很確定Cg也是這樣。
所以,你應該能夠編寫這樣的兩個值:
output.a = (4.0 * clamp(val1, 0.0, 63.0)
+ clamp(val2, 0.0, 3.0))/255.0;
和檢索他們是這樣的:
float val1 = floor(input.a * 255.0/4.0);
float val2 = fmod(input.a * 255.0, 4.0);
這相當於對整數位運算。
你的意思是我只是將float設置爲我的整數?當我嘗試它時,它只是將我的值限制在0和1之間,所以我無法檢索它。或者我在這裏錯過了什麼? – lifeformed
我不確定我在這裏。我以爲你有8位信息從CPU傳遞到GPU,而數據通道是'float4'的第四部分。如果是這樣,我說這些8位編碼爲0-255整數,將它傳遞給GPU,它將通過DirectX或OpenGL進行規格化(您需要這樣做)爲0-1,最後乘以255.0 in着色器。否則,你可以解釋一下你在GPU和CPU上使用的數據格式嗎? –
我所有的計算都在cg着色器中 - 我正在編碼照明過程之間的值。在我的基本過程中,我需要爲每個像素寫入一個32位的RGBA值。我想存儲有關A組件中每個像素的自定義數據。在不同的照明通道中,我想要檢索該數據,並給出RGBA值。 – lifeformed
不知道你想要的是什麼浮點格式就很難說。 –
@OliCharlesworth:這是問題所在,我不確切知道這種格式是如何存儲在cg中的。 – lifeformed