我有一個float4進入計算着色器,其中3個浮點數實際上是浮點數,但是第四個是2個浮點數一起移位,如何將浮點數轉換爲uint,方法是保留位序列而不是數值?如何將浮點數轉換爲int保留位值
在C++端,我通過創建一個uint指針來解決它,用所需的數字填充它,然後將指針作爲浮點指針傳遞。然而,在hlsl中,與c/C++類似,沒有指針,因此我在這裏停留:|
我有一個float4進入計算着色器,其中3個浮點數實際上是浮點數,但是第四個是2個浮點數一起移位,如何將浮點數轉換爲uint,方法是保留位序列而不是數值?如何將浮點數轉換爲int保留位值
在C++端,我通過創建一個uint指針來解決它,用所需的數字填充它,然後將指針作爲浮點指針傳遞。然而,在hlsl中,與c/C++類似,沒有指針,因此我在這裏停留:|
你可以使用聯合。
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];
在HLSL,你應該能夠做到(你追求的是在f4.w假設值)
uint ui = asuint(f4.w);
uint ui1 = ui & 0xffff;
uint ui2 = ui >> 16;
基本上它看起來像asuint intrinsic以下是你的朋友:)
hey @ karli-raudsepp,你應該回去接受一些你的問題的答案。人們努力回答你的問題,所以你至少可以向未來的讀者展示哪些答案是最有幫助的。 –
我不是一個真正的C++人,但是你不能將float轉換成兩個'short'的結構嗎? – tskuzzy