我有一个float4作为计算着色器的输入,其中3个浮点数真的是浮点数,而第四个是两个uint位移后合并在一起的。我该如何将浮点数转换为uint,同时保留位序而不是数字值?
在c ++方面,我解决了这个问题,通过创建一个uint指针,将其填充所需的数字,然后将指针作为float指针传递。然而,在HLSL中,虽然它与 c / c++ 相似,但没有指针,所以我无法解决此问题 :|
我有一个float4作为计算着色器的输入,其中3个浮点数真的是浮点数,而第四个是两个uint位移后合并在一起的。我该如何将浮点数转换为uint,同时保留位序而不是数字值?
在c ++方面,我解决了这个问题,通过创建一个uint指针,将其填充所需的数字,然后将指针作为float指针传递。然而,在HLSL中,虽然它与 c / c++ 相似,但没有指针,所以我无法解决此问题 :|
uint ui = asuint( f4.w );
uint ui1 = ui & 0xffff;
uint ui2 = ui >> 16;
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];