4

我有一个 float4 进入计算着色器,其中 3 个浮点数确实是浮点数,但第四个是 2 个 uint 一起移位,我如何通过保留位序列而不是数值来将浮点数转换为 uint?

在 C++ 方面,我通过创建一个 uint 指针来解决它,用所需的数字填充它,然后将指针作为浮点指针传递。然而,在与 c/c++ 类似的 hlsl 中,没有指针,所以我卡在这里:|

4

2 回答 2

8

在 HLSL 中,您应该能够执行以下操作(假设您所追求的值在 f4.w 中)

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

基本上它看起来像asuint 内在是你的朋友:)

于 2012-06-14T16:07:25.467 回答
2

你可以使用工会。

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];
于 2012-06-14T14:50:46.713 回答