tgPose.cpp
Go to the documentation of this file.
00001 
00002 #include <blort/TomGine/tgPose.h>
00003 
00004 #include <stdio.h>
00005 
00006 #ifdef WIN32
00007 #include <GL/glew.h>
00008 #include <GL/gl.h>
00009 #include <GL/glu.h>
00010 #else
00011 #include <GL/gl.h>
00012 #include <GL/glu.h>
00013 #include <GL/glext.h>
00014 #endif
00015 
00016 using namespace TomGine;
00017 
00018 tgPose tgPose::operator*(const tgPose& p) const{
00019         tgPose ret;
00020         mat3 R, pR, rR;
00021         vec3 t, pt, rt;
00022         
00023         this->GetPose(R,t);
00024         p.GetPose(pR, pt);
00025         
00026         rR = R * pR;
00027         rt = (R * pt) + t;
00028         
00029         ret.SetPose(rR, rt);
00030         return ret;
00031 }
00032 
00033 vec3 tgPose::operator*(const vec3& pt) const{
00034         vec3 ret;
00035         mat3 R;
00036         vec3 t;
00037         
00038         this->GetPose(R,t);
00039         
00040         ret = (R * pt) + t;
00041         
00042         return ret;
00043 }
00044 
00045 tgPose tgPose::operator+(const tgPose &p) const{
00046         tgPose res;
00047         res.t = t - p.t;
00048         res.q = q - p.q;
00049         return res;
00050 }
00051 
00052 tgPose tgPose::operator-(const tgPose &p) const{
00053         tgPose res;
00054         res.t = t - p.t;
00055         res.q = q - p.q;
00056         return res;
00057 }
00058 
00059 tgPose tgPose::Transpose() const{
00060         tgPose ret;
00061         mat3 R;
00062         vec3 t;
00063         GetPose(R,t);
00064         
00065         R = R.transpose();
00066         t = t;
00067         
00068         ret.SetPose(R,t);
00069         return ret;
00070 }
00071 
00072 void tgPose::Activate() const {
00073         glPushMatrix();
00074                 glTranslatef(t.x, t.y, t.z);
00075                 glMultMatrixf(q.getMatrix4());
00076 }
00077 
00078 void tgPose::Deactivate() const {
00079         glPopMatrix();
00080 }
00081 
00082 void tgPose::PrintHeader() const{
00083         printf("tx ty tz qx qy qz qw\n");
00084 }
00085 
00086 void tgPose::Print() const {
00087         printf("%f %f %f %f %f %f %f\n", t.x, t.y, t.z, q.x, q.y, q.z, q.w);
00088 }
00089 
00090 void tgPose::SetPose(mat3 rot, vec3 pos){
00091         q.fromMatrix(rot);
00092         q.normalise();
00093                 
00094         t.x = pos.x;
00095         t.y = pos.y;
00096         t.z = pos.z;
00097 }
00098 
00099 void tgPose::GetPose(mat3 &rot, vec3 &pos) const {
00100         
00101         rot = q.getMatrix3();
00102         
00103         pos.x = t.x;
00104         pos.y = t.y;
00105         pos.z = t.z;
00106 }
00107 
00108 void tgPose::Rotate(float x, float y, float z){
00109         if(x==0.0 && y==0.0 && z ==0.0)
00110                 return;
00111         
00112         tgQuaternion q2;
00113         
00114         q2.fromEuler(x,y,z);
00115         q = q2 * q;
00116         q.normalise();
00117 }
00118 
00119 void tgPose::RotateAxis(vec3 rot){
00120 //      tgQuaternion q2;
00121 //      q2.fromEuler(rot.x,rot.y,rot.z);
00122 //      q = q2 * q;
00123 //      q.normalise();
00124         tgQuaternion q2;
00125         float a = rot.length();
00126         rot.normalize();
00127         q2.fromAxis(rot,a);
00128         q = q2 * q;
00129         q.normalise(); 
00130 }
00131 
00132 void tgPose::RotateEuler(vec3 rot){
00133         tgQuaternion q2;
00134         q2.fromEuler(rot.x,rot.y,rot.z);
00135         q = q2 * q;
00136         q.normalise();
00137 }
00138 
00139 void tgPose::Translate(float x, float y, float z){
00140         t.x = t.x + x;
00141         t.y = t.y + y;
00142         t.z = t.z + z;
00143 }
00144 
00145 void tgPose::Translate(vec3 trans){
00146         t.x = t.x + trans.x;
00147         t.y = t.y + trans.y;
00148         t.z = t.z + trans.z;
00149 }


blort
Author(s): Michael Zillich, Thomas Mörwald, Johann Prankl, Andreas Richtsfeld, Bence Magyar (ROS version)
autogenerated on Thu Jan 2 2014 11:38:26