2012-06-14 112 views
0

我有一個float4進入計算着色器,其中3個浮點數實際上是浮點數,但是第四個是2個浮點數一起移位,如何將浮點數轉換爲uint,方法是保留位序列而不是數值?如何將浮點數轉換爲int保留位值

在C++端,我通過創建一個uint指針來解決它,用所需的數字填充它,然後將指針作爲浮點指針傳遞。然而,在hlsl中,與c/C++類似,沒有指針,因此我在這裏停留:|

+8

hey @ karli-raudsepp,你應該回去接受一些你的問題的答案。人們努力回答你的問題,所以你至少可以向未來的讀者展示哪些答案是最有幫助的。 –

+0

我不是一個真正的C++人,但是你不能將float轉換成兩個'short'的結構嗎? – tskuzzy

回答

3

你可以使用聯合。

float f; // you float value is here 

union X 
{ 
    float f; 
    short int a[2]; 
} x; 
x.f = f; 

int i1 = x.a[0]; // these are your ints 
int i2 = x.a[1]; 
+0

嗯,浮點數只有32位。我想你想要'短'而不是'int'。 – 2012-06-14 14:54:08

+0

@infact修改了答案以反映這一點。 –

+0

這對HLSL有效嗎? – Goz

4

在HLSL,你應該能夠做到(你追求的是在f4.w假設值)

uint ui = asuint(f4.w); 
uint ui1 = ui & 0xffff; 
uint ui2 = ui >> 16; 

基本上它看起來像asuint intrinsic以下是你的朋友:)

+0

啊是的,非常棒! –

+0

如果一個答案可以幫助你,那麼你應該考慮接受它 –

+0

@LưuVĩnhPhúc:我懷疑他會注意到......我是那個得到我的答案的意見通知的人) – Goz