diff --git a/panda/src/egg/eggTransform3d.cxx b/panda/src/egg/eggTransform3d.cxx index 45f5c523c1..abc4c1adca 100644 --- a/panda/src/egg/eggTransform3d.cxx +++ b/panda/src/egg/eggTransform3d.cxx @@ -135,9 +135,22 @@ add_rotz(double angle) { //////////////////////////////////////////////////////////////////// void EggTransform3d:: add_rotate(double angle, const LVector3d &axis) { + LVector3d normaxis = normalize(axis); _components.push_back(Component(CT_rotate, angle)); - _components.back()._vector = new LVector3d(axis); - _transform *= LMatrix4d::rotate_mat(angle, axis); + _components.back()._vector = new LVector3d(normaxis); + _transform *= LMatrix4d::rotate_mat(angle, normaxis); +} + +//////////////////////////////////////////////////////////////////// +// Function: EggTransform3d::add_rotate +// Access: Public +// Description: Appends an arbitrary rotation to the current +// transform, expressed as a quaternion. This is +// converted to axis-angle notation for the egg file. +//////////////////////////////////////////////////////////////////// +void EggTransform3d:: +add_rotate(const LQuaterniond &quat) { + add_rotate(quat.get_angle(), quat.get_axis()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/egg/eggTransform3d.h b/panda/src/egg/eggTransform3d.h index 58e763eaeb..2dd6be7b17 100644 --- a/panda/src/egg/eggTransform3d.h +++ b/panda/src/egg/eggTransform3d.h @@ -44,6 +44,7 @@ public: void add_roty(double angle); void add_rotz(double angle); void add_rotate(double angle, const LVector3d &axis); + void add_rotate(const LQuaterniond &quat); void add_scale(const LVecBase3d &scale); void add_uniform_scale(double scale); void add_matrix(const LMatrix4d &mat);