| 517 | } |
| 518 | |
| 519 | void BitStream::writeQuat( const QuatF& quat, U32 bitCount ) |
| 520 | { |
| 521 | F32 quatVals[4] = { quat.x, quat.y, quat.z, quat.w }; |
| 522 | bool flipQuat = (quatVals[0] < 0); |
| 523 | F32 maxVal = mFabs(quatVals[0]); |
| 524 | S32 idxMax = 0; |
| 525 | |
| 526 | for (S32 i = 1; i < 4; ++i) |
| 527 | { |
| 528 | if (mFabs(quatVals[i]) > maxVal) |
| 529 | { |
| 530 | idxMax = i; |
| 531 | maxVal = mFabs(quatVals[i]); |
| 532 | flipQuat = (quatVals[i] < 0); |
| 533 | } |
| 534 | } |
| 535 | writeInt(idxMax, 2); |
| 536 | |
| 537 | for (S32 i = 0; i < 4; ++i) |
| 538 | { |
| 539 | if (i == idxMax) |
| 540 | continue; |
| 541 | F32 curValue = (flipQuat ? -quatVals[i] : quatVals[i]) * (F32) M_SQRT2; |
| 542 | writeSignedFloat( curValue, bitCount ); |
| 543 | } |
| 544 | } |
| 545 | |
| 546 | void BitStream::readQuat( QuatF *outQuat, U32 bitCount ) |
| 547 | { |