]> git.mxchange.org Git - simgear.git/commitdiff
Make use of optimized matrix multiplication routines in osg.
authorfrohlich <frohlich>
Tue, 24 Mar 2009 08:03:15 +0000 (08:03 +0000)
committerTim Moore <timoore@redhat.com>
Mon, 30 Mar 2009 16:42:45 +0000 (18:42 +0200)
Modified Files:
simgear/scene/model/SGTranslateTransform.cxx

simgear/scene/model/SGTranslateTransform.cxx

index e185618eb44c8683d52ae727cb3e78ecea2152e1..40d636347c0320293d4c0e936df3d0472201e0f7 100644 (file)
 
 #include "SGTranslateTransform.hxx"
 
-static inline void
-set_translation (osg::Matrix &matrix, double position_m, const SGVec3d &axis)
-{
-  SGVec3d xyz = axis * position_m;
-  matrix.makeIdentity();
-  matrix(3, 0) = xyz[0];
-  matrix(3, 1) = xyz[1];
-  matrix(3, 2) = xyz[2];
-}
-
 SGTranslateTransform::SGTranslateTransform() :
   _axis(0, 0, 0),
   _value(0)
@@ -59,13 +49,9 @@ SGTranslateTransform::computeLocalToWorldMatrix(osg::Matrix& matrix,
                                                 osg::NodeVisitor* nv) const 
 {
   if (_referenceFrame == RELATIVE_RF) {
-    osg::Matrix tmp;
-    set_translation(tmp, _value, _axis);
-    matrix.preMult(tmp);
+    matrix.preMultTranslate((_value*_axis).osg());
   } else {
-    osg::Matrix tmp;
-    set_translation(tmp, _value, _axis);
-    matrix = tmp;
+    matrix.setTrans((_value*_axis).osg());
   }
   return true;
 }
@@ -75,13 +61,9 @@ SGTranslateTransform::computeWorldToLocalMatrix(osg::Matrix& matrix,
                                                 osg::NodeVisitor* nv) const
 {
   if (_referenceFrame == RELATIVE_RF) {
-    osg::Matrix tmp;
-    set_translation(tmp, -_value, _axis);
-    matrix.postMult(tmp);
+    matrix.postMultTranslate((-_value*_axis).osg());
   } else {
-    osg::Matrix tmp;
-    set_translation(tmp, -_value, _axis);
-    matrix = tmp;
+    matrix.setTrans((-_value*_axis).osg());
   }
   return true;
 }