quantize hpr to eliminate small values

This commit is contained in:
David Rose 2002-06-20 23:37:03 +00:00
parent eaab3cbb4b
commit 45941b3fff
3 changed files with 15 additions and 5 deletions

View File

@ -356,27 +356,29 @@ get_r() const {
////////////////////////////////////////////////////////////////////
INLINE void DriveInterface::
set_hpr(const LVecBase3f &hpr) {
_hpr = hpr;
set_hpr(hpr[0], hpr[1], hpr[2]);
}
INLINE void DriveInterface::
set_hpr(float h, float p, float r) {
_hpr.set(h, p, r);
set_h(h);
set_p(p);
set_r(r);
}
INLINE void DriveInterface::
set_h(float h) {
_hpr[0] = h;
_hpr[0] = _hpr_quantize * floor(h / _hpr_quantize + 0.5f);
}
INLINE void DriveInterface::
set_p(float p) {
_hpr[1] = p;
_hpr[1] = _hpr_quantize * floor(p / _hpr_quantize + 0.5f);
}
INLINE void DriveInterface::
set_r(float r) {
_hpr[2] = r;
_hpr[2] = _hpr_quantize * floor(r / _hpr_quantize + 0.5f);
}
////////////////////////////////////////////////////////////////////

View File

@ -31,6 +31,7 @@
#include "dataGraphTraverser.h"
TypeHandle DriveInterface::_type_handle;
const float DriveInterface::_hpr_quantize = 0.001;
DriveInterface::KeyHeld::
KeyHeld() {

View File

@ -171,6 +171,13 @@ private:
PT(EventStoreTransform) _transform;
PT(EventStoreVec3) _velocity;
// This is the smallest meaningful value we can set on the hpr via
// the public set_hpr() interface. It's intended to filter out
// small meaningless perturbations of hpr that may get introduced
// due to numerical inaccuracy as we compute relative orientations
// in the show.
static const float _hpr_quantize;
public:
static TypeHandle get_class_type() {
return _type_handle;