Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 4998 in orxonox.OLD for orxonox/trunk/src/lib/math/vector.h


Ignore:
Timestamp:
Aug 13, 2005, 7:19:51 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: more optimizations of the Quaternion Class.
Now the 3D-rotation is much faster through this code:

Vector tmpRot = this→getAbsDir().getSpacialAxis();
glRotatef (this→getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );

instead of the old Matrix-approach. furthermore glRotate is optimized much better in openGL as is clearly stated in the red book

also implemented some other really useless functions for Quaternion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/lib/math/vector.h

    r4997 r4998  
    150150  inline Quaternion operator= (const Quaternion& q) {this->v = q.v; this->w = q.w; return *this;}
    151151  /** conjugates this Quaternion @returns the conjugate */
    152   inline Quaternion conjugate () const { Quaternion r(*this); r.v = Vector() - r.v; return r; };
     152  inline Quaternion conjugate () const { return Quaternion(Vector(-v.x, -v.y, -v.z), this->w); };
    153153  /** @returns the norm of The Quaternion */
    154154  inline float norm () const { return w*w + v.x*v.x + v.y*v.y + v.z*v.z; };
     
    158158  inline Vector apply (const Vector& v) const { return (*this * Quaternion(v, 0) * conjugate()).v; };
    159159  void matrix (float m[4][4]) const;
     160  /** @returns the normalized Quaternion (|this|) */
     161  inline Quaternion getNormalized() const { float n = this->norm(); return Quaternion(this->v/n, this->w/n); };
     162  /** normalizes the current Quaternion */
     163  inline void normalize() { float n = this->norm(); this->v /= n; this->w/=n; };
     164
     165  /** @returns the rotational axis of this Quaternion */
     166  inline Vector getSpacialAxis() const { return this->v / sin(acos(w));/*sqrt(v.x*v.x + v.y*v.y + v.z+v.z);*/ };
     167  /** @returns the rotational angle of this Quaternion around getSpacialAxis()  !! IN DEGREE !! */
     168  inline float getSpacialAxisAngle() const { return 360 / M_PI * acos(this->w); };
     169
     170  static Quaternion quatSlerp(const Quaternion& from, const Quaternion& to, float t);
    160171
    161172  void debug();
     173
    162174
    163175 public:
     
    167179};
    168180
    169 Quaternion quatSlerp(const Quaternion& from, const Quaternion& to, float t);
    170181
    171182
Note: See TracChangeset for help on using the changeset viewer.