2012-06-14 56 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