Index: /orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.cc	(revision 4997)
+++ /orxonox/trunk/src/lib/coord/p_node.cc	(revision 4998)
@@ -327,5 +327,4 @@
 }
 
-
 /**
  *  sets the absolute direction (0,0,1)
@@ -543,16 +542,22 @@
       if (unlikely(this->toDirection != NULL))
       {
-        Quaternion rotQuat = (*this->toDirection / this->getRelDir()) *dt*bias;
-        rotQuat.debug();
-//        if (likely(rotQuat.len() >= .001))
+        Quaternion rotQuat = Quaternion(.1, Vector(0,1,0));// (*this->toDirection / this->relDirection);
+//         printf("1: ");
+//         this->relDirection.debug();
+//         printf("2: ");
+//         this->toDirection->debug();
+//         printf("3: ");
+//         rotQuat.debug();
+
+        if (true)//likely(rotQuat.len() >= .001))
         {
           this->shiftDir(rotQuat);
         }
-/*        else
+        else
         {
           delete this->toCoordinate;
           this->toCoordinate = NULL;
           PRINTF(5)("SmoothMove of %s finished\n", this->getName());
-        }*/
+        }
       }
 
@@ -664,5 +669,4 @@
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
-  float matrix[4][4];
 
   /* translate */
@@ -671,6 +675,9 @@
                 this->getAbsCoor ().z);
   /* rotate */
-  this->getAbsDir ().matrix (matrix);
-  glMultMatrixf((float*)matrix);
+//  this->getAbsDir ().matrix (matrix);
+//  glMultMatrixf((float*)matrix);
+
+  Vector tmpRot = this->getAbsDir().getSpacialAxis();
+  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
   {
     glBegin(GL_LINE_STRIP);
Index: /orxonox/trunk/src/lib/math/vector.cc
===================================================================
--- /orxonox/trunk/src/lib/math/vector.cc	(revision 4997)
+++ /orxonox/trunk/src/lib/math/vector.cc	(revision 4998)
@@ -197,5 +197,5 @@
  * @returns the Result of the smooth move
 */
-Quaternion quatSlerp(const Quaternion& from, const Quaternion& to, float t)
+Quaternion Quaternion::quatSlerp(const Quaternion& from, const Quaternion& to, float t)
 {
   float tol[4];
@@ -306,5 +306,4 @@
 void Quaternion::debug()
 {
-  PRINT(0)("Quaternion Debug Information\n");
   PRINT(0)("real a=%f; imag: x=%f y=%f z=%f\n", w, v.x, v.y, v.z);
 }
Index: /orxonox/trunk/src/lib/math/vector.h
===================================================================
--- /orxonox/trunk/src/lib/math/vector.h	(revision 4997)
+++ /orxonox/trunk/src/lib/math/vector.h	(revision 4998)
@@ -150,5 +150,5 @@
   inline Quaternion operator= (const Quaternion& q) {this->v = q.v; this->w = q.w; return *this;}
   /** conjugates this Quaternion @returns the conjugate */
-  inline Quaternion conjugate () const { Quaternion r(*this); r.v = Vector() - r.v; return r; };
+  inline Quaternion conjugate () const { return Quaternion(Vector(-v.x, -v.y, -v.z), this->w); };
   /** @returns the norm of The Quaternion */
   inline float norm () const { return w*w + v.x*v.x + v.y*v.y + v.z*v.z; };
@@ -158,6 +158,18 @@
   inline Vector apply (const Vector& v) const { return (*this * Quaternion(v, 0) * conjugate()).v; };
   void matrix (float m[4][4]) const;
+  /** @returns the normalized Quaternion (|this|) */
+  inline Quaternion getNormalized() const { float n = this->norm(); return Quaternion(this->v/n, this->w/n); };
+  /** normalizes the current Quaternion */
+  inline void normalize() { float n = this->norm(); this->v /= n; this->w/=n; };
+
+  /** @returns the rotational axis of this Quaternion */
+  inline Vector getSpacialAxis() const { return this->v / sin(acos(w));/*sqrt(v.x*v.x + v.y*v.y + v.z+v.z);*/ };
+  /** @returns the rotational angle of this Quaternion around getSpacialAxis()  !! IN DEGREE !! */
+  inline float getSpacialAxisAngle() const { return 360 / M_PI * acos(this->w); };
+
+  static Quaternion quatSlerp(const Quaternion& from, const Quaternion& to, float t);
 
   void debug();
+
 
  public:
@@ -167,5 +179,4 @@
 };
 
-Quaternion quatSlerp(const Quaternion& from, const Quaternion& to, float t);
 
 
Index: /orxonox/trunk/src/util/animation/animation3d.cc
===================================================================
--- /orxonox/trunk/src/util/animation/animation3d.cc	(revision 4997)
+++ /orxonox/trunk/src/util/animation/animation3d.cc	(revision 4998)
@@ -401,7 +401,7 @@
 void Animation3D::rLinear(float timePassed) const
 {
-  this->object->setRelDir(quatSlerp( this->nextKeyFrame->direction,
-                                     this->currentKeyFrame->direction,
-                                     timePassed/this->currentKeyFrame->duration) );
+  this->object->setRelDir(Quaternion::quatSlerp( this->nextKeyFrame->direction,
+                          this->currentKeyFrame->direction,
+                          timePassed/this->currentKeyFrame->duration) );
 }
 
@@ -420,7 +420,7 @@
     scale = 1.0 - sin( M_PI * timePassed / this->currentKeyFrame->duration);
 
-  this->object->setRelDir(quatSlerp( this->nextKeyFrame->direction,
-                                     this->currentKeyFrame->direction,
-                                     scale) );
+  this->object->setRelDir(Quaternion::quatSlerp( this->nextKeyFrame->direction,
+                          this->currentKeyFrame->direction,
+                          scale) );
 }
 
@@ -435,7 +435,7 @@
 {
   float scale = cos(M_PI * timePassed / this->currentKeyFrame->duration);
-  this->object->setRelDir(quatSlerp( this->nextKeyFrame->direction,
-                                     this->currentKeyFrame->direction,
-                                     scale) );
+  this->object->setRelDir(Quaternion::quatSlerp( this->nextKeyFrame->direction,
+                          this->currentKeyFrame->direction,
+                          scale) );
 }
 
@@ -458,7 +458,7 @@
 {
   float scale = (1.0 - expf(- timePassed * expFactorRot));
-  this->object->setRelDir(quatSlerp( this->nextKeyFrame->direction,
-                                     this->currentKeyFrame->direction,
-                                     scale) );
+  this->object->setRelDir(Quaternion::quatSlerp( this->nextKeyFrame->direction,
+                          this->currentKeyFrame->direction,
+                          scale) );
 }
 
Index: /orxonox/trunk/src/world_entities/camera.cc
===================================================================
--- /orxonox/trunk/src/world_entities/camera.cc	(revision 4997)
+++ /orxonox/trunk/src/world_entities/camera.cc	(revision 4998)
@@ -142,8 +142,9 @@
     case VIEW_FRONT:
       this->toFovy = 120.0;
-      this->softReparent("Player");
-      this->target->softReparent("Player");
-      this->setRelCoorSoft(4, 0, 0);
-      this->target->setRelCoorSoft(10,0,0);
+//       this->softReparent("Player");
+//       this->target->softReparent("Player");
+//       this->setRelCoorSoft(4, 0, 0);
+//       this->target->setRelCoorSoft(10,0,0);
+      this->target->setRelDirSoft(Quaternion(M_PI/4.0, Vector(0,1,0)));
       break;
     case VIEW_LEFT:
Index: /orxonox/trunk/src/world_entities/player.cc
===================================================================
--- /orxonox/trunk/src/world_entities/player.cc	(revision 4997)
+++ /orxonox/trunk/src/world_entities/player.cc	(revision 4998)
@@ -222,6 +222,4 @@
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
-  float matrix[4][4];
-
   /* translate */
   glTranslatef (this->getAbsCoor ().x,
@@ -229,7 +227,6 @@
                 this->getAbsCoor ().z);
   /* rotate */
-  this->getAbsDir ().matrix (matrix);
-  glMultMatrixf((float*)matrix);
-
+  Vector tmpRot = this->getAbsDir().getSpacialAxis();
+  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
   this->model->draw();
   glPopMatrix();
Index: /orxonox/trunk/src/world_entities/skybox.cc
===================================================================
--- /orxonox/trunk/src/world_entities/skybox.cc	(revision 4997)
+++ /orxonox/trunk/src/world_entities/skybox.cc	(revision 4998)
@@ -167,20 +167,4 @@
   this->size = size;
 }
-
-/**
- *  draws the SkyBox
-*/
-void SkyBox::draw()
-{
-  glPushMatrix();
-  glMatrixMode(GL_MODELVIEW);
-  Vector r = this->getAbsCoor();
-  glTranslatef(r.x, r.y, r.z);
-
-  this->model->draw();
-
-  glPopMatrix();
-}
-
 
 /**
Index: /orxonox/trunk/src/world_entities/skybox.h
===================================================================
--- /orxonox/trunk/src/world_entities/skybox.h	(revision 4997)
+++ /orxonox/trunk/src/world_entities/skybox.h	(revision 4998)
@@ -34,5 +34,5 @@
 
   void setSize(float size);
-  /** \brief assumes jpg as input-format */
+  /** assumes jpg as input-format */
   void setTexture(const char* name) { setTextureAndType (name, "jpg"); };
 
@@ -40,6 +40,4 @@
   void setTextures(const char* top, const char* bottom, const char* left,
                    const char* right, const char* front, const char* back);
-
-  virtual void draw();
 
  private:
Index: /orxonox/trunk/src/world_entities/terrain.cc
===================================================================
--- /orxonox/trunk/src/world_entities/terrain.cc	(revision 4997)
+++ /orxonox/trunk/src/world_entities/terrain.cc	(revision 4998)
@@ -106,5 +106,4 @@
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
-  float matrix[4][4];
 
   /* translate */
@@ -113,6 +112,6 @@
                 this->getAbsCoor ().z);
   /* rotate */
-  this->getAbsDir ().matrix (matrix);
-  glMultMatrixf((float*)matrix);
+  Vector tmpRot = this->getAbsDir().getSpacialAxis();
+  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
 
   if (this->objectList)
Index: /orxonox/trunk/src/world_entities/world_entity.cc
===================================================================
--- /orxonox/trunk/src/world_entities/world_entity.cc	(revision 4997)
+++ /orxonox/trunk/src/world_entities/world_entity.cc	(revision 4998)
@@ -179,6 +179,4 @@
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
-  float matrix[4][4];
-
   /* translate */
   glTranslatef (this->getAbsCoor ().x,
@@ -186,6 +184,6 @@
                 this->getAbsCoor ().z);
   /* rotate */
-  this->getAbsDir ().matrix (matrix);
-  glMultMatrixf((float*)matrix);
+  Vector tmpRot = this->getAbsDir().getSpacialAxis();
+  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
 
   if (this->obbTree)
