]> git.mxchange.org Git - simgear.git/commitdiff
math: Remove SGMath osg dependency.
authorMathias Froehlich <Mathias.Froehlich@web.de>
Sat, 3 Mar 2012 12:32:49 +0000 (13:32 +0100)
committerMathias Froehlich <Mathias.Froehlich@web.de>
Sat, 3 Mar 2012 12:35:20 +0000 (13:35 +0100)
Move osg dependent stuff from SGMath into simgear/scene/util/OsgMath.hxx.
Update includes in simgear to reflect this change.
Note that this change also requires an updated flightgear version.

30 files changed:
simgear/math/CMakeLists.txt
simgear/math/SGGeod.cxx [deleted file]
simgear/math/SGGeod.hxx
simgear/math/SGIntersect.hxx
simgear/math/SGQuat.hxx
simgear/math/SGVec2.hxx
simgear/math/SGVec3.hxx
simgear/math/SGVec4.hxx
simgear/scene/material/Effect.cxx
simgear/scene/material/TextureBuilder.cxx
simgear/scene/model/SGInteractionAnimation.cxx
simgear/scene/model/SGMaterialAnimation.cxx
simgear/scene/model/SGRotateTransform.cxx
simgear/scene/model/SGScaleTransform.cxx
simgear/scene/model/SGTranslateTransform.cxx
simgear/scene/model/animation.cxx
simgear/scene/model/particles.cxx
simgear/scene/model/placement.cxx
simgear/scene/sky/cloud.cxx
simgear/scene/sky/dome.cxx
simgear/scene/sky/sky.cxx
simgear/scene/tgdb/ReaderWriterSPT.cxx
simgear/scene/tgdb/SGTexturedTriangleBin.hxx
simgear/scene/tgdb/SGVasiDrawable.cxx
simgear/scene/tgdb/TileEntry.cxx
simgear/scene/tgdb/TreeBin.hxx
simgear/scene/tgdb/pt_lights.cxx
simgear/scene/util/CMakeLists.txt
simgear/scene/util/OsgMath.hxx [new file with mode: 0644]
simgear/scene/util/SGUpdateVisitor.hxx

index ef71ed50f34b5da6c7152bec59119c470179af95..f66ec15a8ee78cf3ff8a8bf38911a4c9062d5c2e 100644 (file)
@@ -29,15 +29,14 @@ set(HEADERS
     leastsqs.hxx
     sg_geodesy.hxx
     sg_types.hxx
-       sg_random.h
+    sg_random.h
     )
 
 set(SOURCES 
-    SGGeod.cxx
     SGGeodesy.cxx
     interpolater.cxx
     leastsqs.cxx
-       sg_random.c
+    sg_random.c
     )
 
 simgear_component(math math "${SOURCES}" "${HEADERS}")
diff --git a/simgear/math/SGGeod.cxx b/simgear/math/SGGeod.cxx
deleted file mode 100644 (file)
index 20fa193..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2008  Tim Moore timoore@redhat.com
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-//
-
-#ifdef HAVE_CONFIG_H
-#  include <simgear_config.h>
-#endif
-
-#include "SGMath.hxx"
-
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-
-osg::Matrix SGGeod::makeSimulationFrameRelative() const
-{
-    SGQuatd hlOr = SGQuatd::fromLonLat(*this);
-    return osg::Matrix(toOsg(hlOr));
-}
-
-osg::Matrix SGGeod::makeSimulationFrame() const
-{
-    osg::Matrix result(makeSimulationFrameRelative());
-    SGVec3d coord;
-    SGGeodesy::SGGeodToCart(*this, coord);
-    result.setTrans(toOsg(coord));
-    return result;
-}
-
-osg::Matrix SGGeod::makeZUpFrameRelative() const
-{
-    osg::Matrix result(makeSimulationFrameRelative());
-    // 180 degree rotation around Y axis
-    osg::Quat flip(0.0, 1.0, 0.0, 0.0);
-    result.preMult(osg::Matrix(flip));
-    return result;
-}
-
-osg::Matrix SGGeod::makeZUpFrame() const
-{
-    osg::Matrix result(makeZUpFrameRelative());
-    SGVec3d coord;
-    SGGeodesy::SGGeodToCart(*this, coord);
-    result.setTrans(toOsg(coord));
-    return result;
-}
-
-#endif
index a7153334d5d78fe0e9061bde320270179279bfe4..9a9ab14651d43fd19e3b3b4f237ad0f7fd656d73 100644 (file)
 
 #include <simgear/constants.h>
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-#include <osg/Matrix>
-#endif
-
 // #define SG_GEOD_NATIVE_DEGREE
 
 /// Class representing a geodetic location
@@ -89,19 +85,6 @@ public:
   // Compare two geodetic positions for equality
   bool operator == ( const SGGeod & other ) const;
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-  // Create a local coordinate frame in the earth-centered frame of
-  // reference. X points north, Z points down.
-  // makeSimulationFrameRelative() only includes rotation.
-  osg::Matrix makeSimulationFrameRelative() const;
-  osg::Matrix makeSimulationFrame() const;
-
-  // Create a Z-up local coordinate frame in the earth-centered frame
-  // of reference. This is what scenery models, etc. expect.
-  // makeZUpFrameRelative() only includes rotation.
-  osg::Matrix makeZUpFrameRelative() const;
-  osg::Matrix makeZUpFrame() const;
-#endif
 private:
   /// This one is private since construction is not unique if you do
   /// not know the units of the arguments. Use the factory methods for
index 24741f6409bd78dcfeb603525aab6cbd0a474592..0fd2596bea109f7ef27a87975752eb9d37f5298c 100644 (file)
@@ -18,6 +18,8 @@
 #ifndef SGIntersect_HXX
 #define SGIntersect_HXX
 
+#include <algorithm>
+
 template<typename T>
 inline bool
 intersects(const SGSphere<T>& s1, const SGSphere<T>& s2)
index 9449c914cbf731aed0d7ac9178c113dd3a4cb33e..2ac0ad2292c5c4a12ab0f61c707584677cd90ac2 100644 (file)
 #undef max
 #endif
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-#include <osg/Quat>
-#endif
-
 /// Quaternion Class
 template<typename T>
 class SGQuat {
@@ -780,16 +776,4 @@ SGQuatd
 toQuatd(const SGQuatf& v)
 { return SGQuatd(v(0), v(1), v(2), v(3)); }
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-inline
-SGQuatd
-toSG(const osg::Quat& q)
-{ return SGQuatd(q[0], q[1], q[2], q[3]); }
-
-inline
-osg::Quat
-toOsg(const SGQuatd& q)
-{ return osg::Quat(q[0], q[1], q[2], q[3]); }
-#endif
-
 #endif
index 2a40564145c39e68ad13426a4b556f92a0ad6506..68e74c1736a874fb6b06549c49057d993b3e9bd1 100644 (file)
 #ifndef SGVec2_H
 #define SGVec2_H
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-#include <osg/Vec2f>
-#include <osg/Vec2d>
-#endif
-
 /// 2D Vector Class
 template<typename T>
 class SGVec2 {
@@ -371,27 +366,4 @@ SGVec2d
 toVec2d(const SGVec2f& v)
 { return SGVec2d(v(0), v(1)); }
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-inline
-SGVec2d
-toSG(const osg::Vec2d& v)
-{ return SGVec2d(v[0], v[1]); }
-
-inline
-SGVec2f
-toSG(const osg::Vec2f& v)
-{ return SGVec2f(v[0], v[1]); }
-
-inline
-osg::Vec2d
-toOsg(const SGVec2d& v)
-{ return osg::Vec2d(v[0], v[1]); }
-
-inline
-osg::Vec2f
-toOsg(const SGVec2f& v)
-{ return osg::Vec2f(v[0], v[1]); }
-
-#endif
-
 #endif
index c85b418e23cbab173b66f4164606b4ae13561ecf..56775d3ede34ba6affc15d8fa37076c684311875 100644 (file)
 #ifndef SGVec3_H
 #define SGVec3_H
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-#include <osg/Vec3f>
-#include <osg/Vec3d>
-#endif
-
 /// 3D Vector Class
 template<typename T>
 class SGVec3 {
@@ -505,26 +500,4 @@ SGVec3d
 toVec3d(const SGVec3f& v)
 { return SGVec3d(v(0), v(1), v(2)); }
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-inline
-SGVec3d
-toSG(const osg::Vec3d& v)
-{ return SGVec3d(v[0], v[1], v[2]); }
-
-inline
-SGVec3f
-toSG(const osg::Vec3f& v)
-{ return SGVec3f(v[0], v[1], v[2]); }
-
-inline
-osg::Vec3d
-toOsg(const SGVec3d& v)
-{ return osg::Vec3d(v[0], v[1], v[2]); }
-
-inline
-osg::Vec3f
-toOsg(const SGVec3f& v)
-{ return osg::Vec3f(v[0], v[1], v[2]); }
-#endif
-
 #endif
index 6030c48ba03e2ea331b43442cebfd2df509fdf1b..6e42d957d8710f9a3a56c85cfa9d0b3ddf41f0bd 100644 (file)
 #ifndef SGVec4_H
 #define SGVec4_H
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-#include <osg/Vec4f>
-#include <osg/Vec4d>
-#endif
-
 /// 4D Vector Class
 template<typename T>
 class SGVec4 {
@@ -428,26 +423,4 @@ SGVec4d
 toVec4d(const SGVec4f& v)
 { return SGVec4d(v(0), v(1), v(2), v(3)); }
 
-#ifndef NO_OPENSCENEGRAPH_INTERFACE
-inline
-SGVec4d
-toSG(const osg::Vec4d& v)
-{ return SGVec4d(v[0], v[1], v[2], v[3]); }
-
-inline
-SGVec4f
-toSG(const osg::Vec4f& v)
-{ return SGVec4f(v[0], v[1], v[2], v[3]); }
-
-inline
-osg::Vec4d
-toOsg(const SGVec4d& v)
-{ return osg::Vec4d(v[0], v[1], v[2], v[3]); }
-
-inline
-osg::Vec4f
-toOsg(const SGVec4f& v)
-{ return osg::Vec4f(v[0], v[1], v[2], v[3]); }
-#endif
-
 #endif
index c021b98e46e252b5f185a6c6665d55a3fadcab11..9ca2aceeff184cffad7c9787cca8609061bb524e 100644 (file)
@@ -69,6 +69,7 @@
 
 #include <simgear/scene/util/SGReaderWriterOptions.hxx>
 #include <simgear/scene/tgdb/userdata.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/SGSceneFeatures.hxx>
 #include <simgear/scene/util/StateAttributeFactory.hxx>
 #include <simgear/structure/OSGUtils.hxx>
index 75bd08c553d2faafb5eee28416095834e27e670e..d191ef33c1c57d2886e6b57b4229f54fe1533af9 100644 (file)
 #include <boost/tuple/tuple.hpp>
 #include <boost/tuple/tuple_comparison.hpp>
 
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/SGReaderWriterOptions.hxx>
 #include <simgear/scene/util/SGSceneFeatures.hxx>
 #include <simgear/scene/util/StateAttributeFactory.hxx>
-#include <simgear/math/SGMath.hxx>
 #include <simgear/structure/OSGUtils.hxx>
 
 #include "Noise.hxx"
index 9e7987e9147048fed39849013c1485a40a982663..171f4939682b74dac1cf24d3c2b9a037388bf8a3 100644 (file)
@@ -26,6 +26,7 @@
 #include <osg/NodeVisitor>
 #include <osg/TemplatePrimitiveFunctor>
 
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/SGSceneUserData.hxx>
 #include <simgear/scene/bvh/BVHGroup.hxx>
 #include <simgear/scene/bvh/BVHLineGeometry.hxx>
index 6b5887a102b23f965fa7c9afdc4ab12e95ea4ab7..07bfe6c7a5cd5333d9be8f9ea13ced91f8461d7f 100644 (file)
@@ -28,6 +28,7 @@
 #include <simgear/scene/material/Technique.hxx>
 #include <simgear/scene/model/model.hxx>
 #include <simgear/scene/model/ConditionNode.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 
 using namespace std;
 using namespace simgear;
index d547483958e10477c7cef88bc329017f12c66ec7..4f2a42276f1d7b052107c212c201141713f3ec27 100644 (file)
@@ -27,6 +27,8 @@
 #include <osgDB/Input>
 #include <osgDB/Output>
 
+#include <simgear/scene/util/OsgMath.hxx>
+
 #include "SGRotateTransform.hxx"
 
 static void
index 7b485590df2a7ce25fad74eb80caea3d1c6f22af..0fe7443d5553e9bf0f38170053bbb2d99084b4f3 100644 (file)
@@ -27,6 +27,8 @@
 #include <osgDB/Input>
 #include <osgDB/Output>
 
+#include <simgear/scene/util/OsgMath.hxx>
+
 #include "SGScaleTransform.hxx"
 
 SGScaleTransform::SGScaleTransform() :
index 182c30bfbf3b95da6ab546b4fdd24107ac481a08..9f148b6449e33cfcf8ecadb488dfb8f2340c5d93 100644 (file)
@@ -27,6 +27,8 @@
 #include <osgDB/Input>
 #include <osgDB/Output>
 
+#include <simgear/scene/util/OsgMath.hxx>
+
 #include "SGTranslateTransform.hxx"
 
 SGTranslateTransform::SGTranslateTransform() :
index fa9b44e1021ab3390df18defad2d91a6e5408368..110240b93b9e8273cadd76b5e94d4d17cc3aca71 100644 (file)
@@ -42,6 +42,7 @@
 #include <simgear/props/props.hxx>
 #include <simgear/structure/SGBinding.hxx>
 #include <simgear/scene/material/EffectGeode.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/SGNodeMasks.hxx>
 #include <simgear/scene/util/SGSceneUserData.hxx>
 #include <simgear/scene/util/SGStateAttributeVisitor.hxx>
index acac7dfc6b8696724f42b4c6125df048ce97fab8..4d1ebc04044c29283edba281b630d231866ba14c 100644 (file)
 #endif
 
 #include <simgear/math/SGMath.hxx>
-#include <simgear/math/SGGeod.hxx>
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/props/props.hxx>
 #include <simgear/props/props_io.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/structure/OSGVersion.hxx>
 
 #include <osgParticle/SmokeTrailEffect>
@@ -558,7 +558,7 @@ void Particles::operator()(osg::Node* node, osg::NodeVisitor* nv)
                 // Make new frame for particle system, coincident with
                 // the emitter frame, but oriented with local Z.
                 SGGeod geod = SGGeod::fromCart(toSG(emitOrigin));
-                Matrix newParticleMat = geod.makeZUpFrame();
+                Matrix newParticleMat = makeZUpFrame(geod);
                 Matrix changeParticleFrame
                     = particleMat * Matrix::inverse(newParticleMat);
                 particleFrame->setMatrix(newParticleMat);
index 8d2ab9f2b1f7e38c2171bfb006153a8ba7af17e2..e1c5a0a5abb2a668c6e4173866853fc299dd466b 100644 (file)
@@ -10,6 +10,7 @@
 #include "placement.hxx"
 
 #include <simgear/compiler.h>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/SGSceneUserData.hxx>
 
 \f
index 228f0a8c90a0c18d98ceefbb9c91c3199acabd9f..5bdf91d7c8bd96027397a5f134b64fbd3405793c 100644 (file)
@@ -52,6 +52,7 @@
 #include <simgear/debug/logstream.hxx>
 #include <simgear/scene/model/model.hxx>
 #include <simgear/scene/util/RenderConstants.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/StateAttributeFactory.hxx>
 #include <simgear/screen/extensions.hxx>
 
index 53018f02c9262b38aa91f9a1ed393a8be57c822b..913712cb6bd45c8fa64af3827a279e87af6b06b3 100644 (file)
@@ -40,7 +40,7 @@
 #include <osg/CullFace>
 
 #include <simgear/debug/logstream.hxx>
-#include <simgear/math/SGMath.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/VectorArrayAdapter.hxx>
 #include <simgear/scene/material/Effect.hxx>
 #include <simgear/scene/material/EffectGeode.hxx>
index 84c446e3b8841b4c658d67ba7c7ac280f8429184..4c3a4e2b35b50ad01b6429a27b6633d0b437d5a8 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <simgear/math/sg_random.h>
 #include <simgear/scene/util/RenderConstants.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/sg_inlines.h>
 
 #include <osg/StateSet>
index 02c3e1425ce9f360ef6a720fb3cad546571dfa25..f2c88ecfc212792b84fc8a97521ebf166bb97648 100644 (file)
@@ -32,6 +32,8 @@
 #include <osgDB/FileNameUtils>
 #include <osgDB/ReadFile>
 
+#include <simgear/scene/util/OsgMath.hxx>
+
 #include "BucketBox.hxx"
 
 namespace simgear {
index 9c6d6ab72148b792b2d24ba5def4428396e9e6d6..5de1b5cc3699186f383b05edb65a4d9d24b3f5e3 100644 (file)
@@ -29,7 +29,7 @@
 #include <stdio.h>
 
 #include <simgear/math/sg_random.h>
-#include <simgear/math/SGMath.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include "SGTriangleBin.hxx"
 
 
index bc9b662cf327d9353bdad77abe07751d1cf5ac9e..bb3ce0e49795a46f0cee85265865c49afe06236a 100644 (file)
@@ -27,6 +27,8 @@
 
 #include "SGVasiDrawable.hxx"
 
+#include <simgear/scene/util/OsgMath.hxx>
+
 struct SGVasiDrawable::LightData {
   LightData(const SGVec3f& p, const SGVec3f& n, const SGVec3f& up) :
     position(p),
index dddba9847c7bac1c4e461336ceb54906ab5f44bf..f196c7dd7cc0859050d3dde33edc7aef12efd1d8 100644 (file)
 #include <simgear/debug/logstream.hxx>
 #include <simgear/math/sg_geodesy.hxx>
 #include <simgear/math/sg_random.h>
-#include <simgear/math/SGMath.hxx>
 #include <simgear/misc/sgstream.hxx>
 #include <simgear/scene/material/mat.hxx>
 #include <simgear/scene/material/matlib.hxx>
 #include <simgear/scene/model/ModelRegistry.hxx>
 #include <simgear/scene/tgdb/apt_signs.hxx>
 #include <simgear/scene/tgdb/obj.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/SGReaderWriterOptions.hxx>
 
 #include "ReaderWriterSPT.hxx"
@@ -111,7 +111,7 @@ static void WorldCoordinate(osg::Matrix& obj_pos, double lat,
                             double lon, double elev, double hdg)
 {
     SGGeod geod = SGGeod::fromDegM(lon, lat, elev);
-    obj_pos = geod.makeZUpFrame();
+    obj_pos = makeZUpFrame(geod);
     // hdg is not a compass heading, but a counter-clockwise rotation
     // around the Z axis
     obj_pos.preMult(osg::Matrix::rotate(hdg * SGD_DEGREES_TO_RADIANS,
index 254c88128e3dda79cf5df005fcfd4753cde4ce7b..d49e2fbe33c25e1492f6688fb98f8975b05acab1 100644 (file)
@@ -29,7 +29,7 @@
 #include <osg/Group>
 #include <osg/Matrix>
 
-#include <simgear/math/SGMath.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 
 namespace simgear
 {
index d07a805f97209580f69f4ac9dc5e215016f0bbf4..59003fcb36279df4195b39df69c464d76c3959a8 100644 (file)
@@ -60,6 +60,7 @@
 #include <simgear/debug/logstream.hxx>
 #include <simgear/scene/util/RenderConstants.hxx>
 #include <simgear/scene/util/SGEnlargeBoundingBox.hxx>
+#include <simgear/scene/util/OsgMath.hxx>
 #include <simgear/scene/util/StateAttributeFactory.hxx>
 
 #include <simgear/scene/material/Effect.hxx>
index f04b77c46dcd4f78b87e1ec2427579a7374a2395..1b833484e6cb181e63a94442461af58afe173bc1 100644 (file)
@@ -3,6 +3,7 @@ include (SimGearComponent)
 set(HEADERS 
     CopyOp.hxx
     NodeAndDrawableVisitor.hxx
+    OsgMath.hxx
     PrimitiveUtils.hxx
     QuadTreeBuilder.hxx
     RenderConstants.hxx
diff --git a/simgear/scene/util/OsgMath.hxx b/simgear/scene/util/OsgMath.hxx
new file mode 100644 (file)
index 0000000..46d56cf
--- /dev/null
@@ -0,0 +1,145 @@
+// Copyright (C) 2006-2009  Mathias Froehlich - Mathias.Froehlich@web.de
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+//
+
+#ifndef SIMGEAR_SCENE_UTILS_OSGMATH_HXX
+#define SIMGEAR_SCENE_UTILS_OSGMATH_HXX
+
+#include <osg/Vec2f>
+#include <osg/Vec2d>
+#include <osg/Vec3f>
+#include <osg/Vec3d>
+#include <osg/Vec4f>
+#include <osg/Vec4d>
+#include <osg/Quat>
+#include <osg/Matrix>
+
+#include <simgear/math/SGMath.hxx>
+
+inline
+SGVec2d
+toSG(const osg::Vec2d& v)
+{ return SGVec2d(v[0], v[1]); }
+
+inline
+SGVec2f
+toSG(const osg::Vec2f& v)
+{ return SGVec2f(v[0], v[1]); }
+
+inline
+osg::Vec2d
+toOsg(const SGVec2d& v)
+{ return osg::Vec2d(v[0], v[1]); }
+
+inline
+osg::Vec2f
+toOsg(const SGVec2f& v)
+{ return osg::Vec2f(v[0], v[1]); }
+
+inline
+SGVec3d
+toSG(const osg::Vec3d& v)
+{ return SGVec3d(v[0], v[1], v[2]); }
+
+inline
+SGVec3f
+toSG(const osg::Vec3f& v)
+{ return SGVec3f(v[0], v[1], v[2]); }
+
+inline
+osg::Vec3d
+toOsg(const SGVec3d& v)
+{ return osg::Vec3d(v[0], v[1], v[2]); }
+
+inline
+osg::Vec3f
+toOsg(const SGVec3f& v)
+{ return osg::Vec3f(v[0], v[1], v[2]); }
+
+inline
+SGVec4d
+toSG(const osg::Vec4d& v)
+{ return SGVec4d(v[0], v[1], v[2], v[3]); }
+
+inline
+SGVec4f
+toSG(const osg::Vec4f& v)
+{ return SGVec4f(v[0], v[1], v[2], v[3]); }
+
+inline
+osg::Vec4d
+toOsg(const SGVec4d& v)
+{ return osg::Vec4d(v[0], v[1], v[2], v[3]); }
+
+inline
+osg::Vec4f
+toOsg(const SGVec4f& v)
+{ return osg::Vec4f(v[0], v[1], v[2], v[3]); }
+
+inline
+SGQuatd
+toSG(const osg::Quat& q)
+{ return SGQuatd(q[0], q[1], q[2], q[3]); }
+
+inline
+osg::Quat
+toOsg(const SGQuatd& q)
+{ return osg::Quat(q[0], q[1], q[2], q[3]); }
+
+// Create a local coordinate frame in the earth-centered frame of
+// reference. X points north, Z points down.
+// makeSimulationFrameRelative() only includes rotation.
+inline
+osg::Matrix
+makeSimulationFrameRelative(const SGGeod& geod)
+{ return osg::Matrix(toOsg(SGQuatd::fromLonLat(geod))); }
+
+inline
+osg::Matrix
+makeSimulationFrame(const SGGeod& geod)
+{
+    osg::Matrix result(makeSimulationFrameRelative(geod));
+    SGVec3d coord;
+    SGGeodesy::SGGeodToCart(geod, coord);
+    result.setTrans(toOsg(coord));
+    return result;
+}
+
+// Create a Z-up local coordinate frame in the earth-centered frame
+// of reference. This is what scenery models, etc. expect.
+// makeZUpFrameRelative() only includes rotation.
+inline
+osg::Matrix
+makeZUpFrameRelative(const SGGeod& geod)
+{
+    osg::Matrix result(makeSimulationFrameRelative(geod));
+    // 180 degree rotation around Y axis
+    result.preMultRotate(osg::Quat(0.0, 1.0, 0.0, 0.0));
+    return result;
+}
+
+inline
+osg::Matrix
+makeZUpFrame(const SGGeod& geod)
+{
+    osg::Matrix result(makeZUpFrameRelative(geod));
+    SGVec3d coord;
+    SGGeodesy::SGGeodToCart(geod, coord);
+    result.setTrans(toOsg(coord));
+    return result;
+}
+
+#endif
index 251459a721e5f7484e79d15697fa6bd893331cbb..8f16a270353d21478b08c77dab3d9ae61163120a 100644 (file)
@@ -26,7 +26,7 @@
 #include <osg/PagedLOD>
 #include <osgUtil/UpdateVisitor>
 
-#include "simgear/math/SGMath.hxx"
+#include "OsgMath.hxx"
 
 class SGUpdateVisitor : public osgUtil::UpdateVisitor {
 public: