2013-02-04 40 views
0

語言爲cg。以8位浮點編碼數據(cg)

我有一個8位浮點數必須介於0和1之間(這是float4 rgba顏色值的'a'分量)。我想存儲一個6位無符號整數和一個2位無符號整數。我怎樣才能安全地將這兩個值存儲在這8位中?

我找不到8位浮點格式的任何文檔,尤其是一個限制在0和1之間的文檔。我假設它比data/255更復雜?

+0

不知道你想要的是什麼浮點格式就很難說。 –

+0

@OliCharlesworth:這是問題所在,我不確切知道這種格式是如何存儲在cg中的。 – lifeformed

回答

3

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); 

這相當於對整數位運算。

+0

你的意思是我只是將float設置爲我的整數?當我嘗試它時,它只是將我的值限制在0和1之間,所以我無法檢索它。或者我在這裏錯過了什麼? – lifeformed

+0

我不確定我在這裏。我以爲你有8位信息從CPU傳遞到GPU,而數據通道是'float4'的第四部分。如果是這樣,我說這些8位編碼爲0-255整數,將它傳遞給GPU,它將通過DirectX或OpenGL進行規格化(您需要這樣做)爲0-1,最後乘以255.0 in着色器。否則,你可以解釋一下你在GPU和CPU上使用的數據格式嗎? –

+0

我所有的計算都在cg着色器中 - 我正在編碼照明過程之間的值。在我的基本過程中,我需要爲每個像素寫入一個32位的RGBA值。我想存儲有關A組件中每個像素的自定義數據。在不同的照明通道中,我想要檢索該數據,並給出RGBA值。 – lifeformed