4

計算シェーダーに float4 が入っています。これらの float のうち 3 つは実際には float ですが、4 つ目は 2 つの uint が一緒にシフトされています。数値の代わりにビット シーケンスを保持して float を uint に変換するにはどうすればよいですか?

C ++側では、uintポインターを作成し、目的の数値を入力して、代わりにポインターをfloatポインターとして渡すことで解決しました。ただし、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 に答える