Hi! I really need to convert one of the pivot painter functions from either python(blender pivot painter) or 3DS Max script.
It has to do with shifting bits around, but all float 32 to float 16 conversions I’ve tried give me different results in C++ and they are incorrect. Basically what I am tring to do is to store that mesh indexes in texture alpha. I succesfully write data to the texture and all, but that bits shifting code produces weirds results in C++. I will be glad if someone here can help me. It seems that this bits shifting code isn’t just simple packing conversion, but there is more to it. Here is the pivot painter code from blender, that I need to convert to C++:
def packTextureBits(index):
index = int(index)
index = index +1024
sigh=index&0x8000
sigh=sigh<<16
exptest=index&0x7fff
if exptest==0:
exp=0
else:
exp=index>>10
exp=exp&0x1f
exp=exp-15
exp=exp+127
exp=exp<<23
mant=index&0x3ff
mant=mant<<13
index=sigh|exp|mant
cp = pointer(c_int(index))
fp = cast(cp, POINTER(c_float))
return fp.contents.value
And here is my potential C++ conversion that doesn’t really work:
float PackIntToFloat(int value)
{
value += 1024;
int sign = (value & 0x8000) << 16;
int exp = value & 0x7fff;
if (exp != 0)
{
exp = value >> 10;
exp = exp & 0x1f;
exp = exp - 15 + 127;
exp = exp << 23;
}
int mant = (value & 0x3fff) << 13;
value = sign | exp | mant;
float fp;
memcpy(&fp, &value, sizeof(float));
return fp;
}
Thanks!