我有一个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