如何将float转换为int保留位值

Jak*_*der 1 c++ bits hlsl

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

在c ++方面,我通过创建一个uint指针解决它,用所需的数字填充它,并将指针作为浮点指针传递.然而在hlsl和c/c ++类似,没有指针,所以我在这里停留:|

Goz*_*Goz 6

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

uint ui = asuint( f4.w );
uint ui1 = ui & 0xffff;
uint ui2 = ui >> 16;
Run Code Online (Sandbox Code Playgroud)

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


Ano*_*ail 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];
Run Code Online (Sandbox Code Playgroud)