Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletCollision/Gimpact/btQuantization.h
| Show All 21 Lines | |||||
| 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. | 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. | ||||
| 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. | 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. | ||||
| 3. This notice may not be removed or altered from any source distribution. | 3. This notice may not be removed or altered from any source distribution. | ||||
| */ | */ | ||||
| #include "LinearMath/btTransform.h" | #include "LinearMath/btTransform.h" | ||||
| SIMD_FORCE_INLINE void bt_calc_quantization_parameters( | SIMD_FORCE_INLINE void bt_calc_quantization_parameters( | ||||
| btVector3 & outMinBound, | btVector3& outMinBound, | ||||
| btVector3 & outMaxBound, | btVector3& outMaxBound, | ||||
| btVector3 & bvhQuantization, | btVector3& bvhQuantization, | ||||
| const btVector3& srcMinBound,const btVector3& srcMaxBound, | const btVector3& srcMinBound, const btVector3& srcMaxBound, | ||||
| btScalar quantizationMargin) | btScalar quantizationMargin) | ||||
| { | { | ||||
| //enlarge the AABB to avoid division by zero when initializing the quantization values | //enlarge the AABB to avoid division by zero when initializing the quantization values | ||||
| btVector3 clampValue(quantizationMargin,quantizationMargin,quantizationMargin); | btVector3 clampValue(quantizationMargin, quantizationMargin, quantizationMargin); | ||||
| outMinBound = srcMinBound - clampValue; | outMinBound = srcMinBound - clampValue; | ||||
| outMaxBound = srcMaxBound + clampValue; | outMaxBound = srcMaxBound + clampValue; | ||||
| btVector3 aabbSize = outMaxBound - outMinBound; | btVector3 aabbSize = outMaxBound - outMinBound; | ||||
| bvhQuantization = btVector3(btScalar(65535.0), | bvhQuantization = btVector3(btScalar(65535.0), | ||||
| btScalar(65535.0), | btScalar(65535.0), | ||||
| btScalar(65535.0)) / aabbSize; | btScalar(65535.0)) / | ||||
| aabbSize; | |||||
| } | } | ||||
| SIMD_FORCE_INLINE void bt_quantize_clamp( | SIMD_FORCE_INLINE void bt_quantize_clamp( | ||||
| unsigned short* out, | unsigned short* out, | ||||
| const btVector3& point, | const btVector3& point, | ||||
| const btVector3 & min_bound, | const btVector3& min_bound, | ||||
| const btVector3 & max_bound, | const btVector3& max_bound, | ||||
| const btVector3 & bvhQuantization) | const btVector3& bvhQuantization) | ||||
| { | { | ||||
| btVector3 clampedPoint(point); | btVector3 clampedPoint(point); | ||||
| clampedPoint.setMax(min_bound); | clampedPoint.setMax(min_bound); | ||||
| clampedPoint.setMin(max_bound); | clampedPoint.setMin(max_bound); | ||||
| btVector3 v = (clampedPoint - min_bound) * bvhQuantization; | btVector3 v = (clampedPoint - min_bound) * bvhQuantization; | ||||
| out[0] = (unsigned short)(v.getX()+0.5f); | out[0] = (unsigned short)(v.getX() + 0.5f); | ||||
| out[1] = (unsigned short)(v.getY()+0.5f); | out[1] = (unsigned short)(v.getY() + 0.5f); | ||||
| out[2] = (unsigned short)(v.getZ()+0.5f); | out[2] = (unsigned short)(v.getZ() + 0.5f); | ||||
| } | } | ||||
| SIMD_FORCE_INLINE btVector3 bt_unquantize( | SIMD_FORCE_INLINE btVector3 bt_unquantize( | ||||
| const unsigned short* vecIn, | const unsigned short* vecIn, | ||||
| const btVector3 & offset, | const btVector3& offset, | ||||
| const btVector3 & bvhQuantization) | const btVector3& bvhQuantization) | ||||
| { | { | ||||
| btVector3 vecOut; | btVector3 vecOut; | ||||
| vecOut.setValue( | vecOut.setValue( | ||||
| (btScalar)(vecIn[0]) / (bvhQuantization.getX()), | (btScalar)(vecIn[0]) / (bvhQuantization.getX()), | ||||
| (btScalar)(vecIn[1]) / (bvhQuantization.getY()), | (btScalar)(vecIn[1]) / (bvhQuantization.getY()), | ||||
| (btScalar)(vecIn[2]) / (bvhQuantization.getZ())); | (btScalar)(vecIn[2]) / (bvhQuantization.getZ())); | ||||
| vecOut += offset; | vecOut += offset; | ||||
| return vecOut; | return vecOut; | ||||
| } | } | ||||
| #endif // BT_GIMPACT_QUANTIZATION_H_INCLUDED | #endif // BT_GIMPACT_QUANTIZATION_H_INCLUDED | ||||