2012-06-14 3 views
0

У меня есть float4, входящий в вычислительный шейдер, 3 из этих поплавков действительно являются плавающими, но четвертый - 2 uints, сдвинутый вместе, как бы я преобразовал float в uint, сохранив бит вместо числового значения?как преобразовать float в int сохраняющее значение бита

на стороне C++ я решил его, создав указатель uint, заполнив его нужным номером и передав указатель вместо указателя float. Однако в hlsl, как и в c/C++, нет указателей, поэтому я застрял здесь: |

+8

эй @ karli-raudsepp, вам следует вернуться и принять некоторые ответы на ваши вопросы. Люди работали тяжело отвечать на ваши вопросы, так как минимум вы можете сделать, это показать будущим читателям ответы на которые являются наиболее полезными. –

+0

Я на самом деле не парень на С ++, но разве вы не могли бы поместить float в структуру из двух «коротких вопросов»? – tskuzzy

ответ

3

Вы можете использовать союз.

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]; 
+0

Хмм, поплавок всего 32 бита. Я думаю, вы хотите «короткий» вместо «int». –

+0

@ infact editted ответ, чтобы отразить это. –

+0

Это работает для HLSL? – Goz

4

В HLSL вы должны быть в состоянии сделать следующее (предполагая, что значение вы после в f4.w)

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

В основном это выглядит как asuint intrinsic ваш друг :)

+0

ах да, отлично! –

+0

, если ответ вам поможет, тогда вам стоит подумать о принятии его –

+0

@ LưuVĩnhPhúc: Я ​​сомневаюсь, что он заметит это ... Я тот, кто получает уведомления о моем ответе;) – Goz

Смежные вопросы