]> git.mxchange.org Git - simgear.git/commitdiff
replace glu functions with equivalents from OSG
authorTim Moore <timoore33@gmail.com>
Fri, 8 Oct 2010 21:42:10 +0000 (23:42 +0200)
committerTim Moore <timoore33@gmail.com>
Fri, 8 Oct 2010 21:44:38 +0000 (23:44 +0200)
simgear/math/Makefile.am
simgear/math/project.cxx [new file with mode: 0644]
simgear/math/project.hxx [new file with mode: 0644]
simgear/screen/tr.cxx

index e82e15f11cdece8a981a58149bcd620179b10876..4418aebfdbe74db47ecab43fbd63d53aeb4e5995 100644 (file)
@@ -10,7 +10,7 @@ SGMathTest_LDADD = \
        $(top_builddir)/simgear/debug/libsgdebug.a \
        $(top_builddir)/simgear/structure/libsgstructure.a \
        $(base_LIBS)
-       
+
 SGGeometryTest_SOURCES = SGGeometryTest.cxx
 
 SGGeometryTest_LDADD = \
@@ -18,7 +18,7 @@ SGGeometryTest_LDADD = \
        $(top_builddir)/simgear/debug/libsgdebug.a \
        $(top_builddir)/simgear/structure/libsgstructure.a \
        $(base_LIBS)
-       
+
 lib_LIBRARIES = libsgmath.a
 
 include_HEADERS = \
@@ -50,13 +50,15 @@ include_HEADERS = \
        SGVec2.hxx \
        SGVec3.hxx \
        SGVec4.hxx \
-       beziercurve.hxx
+       beziercurve.hxx \
+       project.hxx
 
 libsgmath_a_SOURCES = \
        interpolater.cxx \
        leastsqs.cxx \
        sg_random.c \
        SGGeod.cxx \
-       SGGeodesy.cxx
+       SGGeodesy.cxx \
+       project.cxx
 
 INCLUDES = -I$(top_srcdir)
diff --git a/simgear/math/project.cxx b/simgear/math/project.cxx
new file mode 100644 (file)
index 0000000..f1c2b14
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (C) 2010  Tim Moore moore@bricoworks.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.
+//
+
+#include "project.hxx"
+
+#include <osg/Math>
+#include <osg/Matrixd>
+
+namespace simgear
+{
+GLint project(GLdouble objX, GLdouble objY, GLdouble objZ,
+              const GLdouble *model, const GLdouble *proj, const GLint *view,
+              GLdouble* winX, GLdouble* winY, GLdouble* winZ)
+{
+    using namespace osg;
+    Vec4d obj(objX, objY, objZ, 1.0);
+    Matrixd Mmodel(model), Mproj(proj);
+    Matrixd Mwin = (Matrixd::translate(1.0, 1.0, 1.0)
+                    * Matrixd::scale(0.5 * view[2], 0.5 * view[3], 0.5)
+                    * Matrixd::translate(view[0], view[1], 0.0));
+    Vec4d result = obj * Mmodel * Mproj * Mwin;
+    if (equivalent(result.w(), 0.0))
+        return GL_FALSE;
+    result = result / result.w();
+    *winX = result.x();  *winY = result.y();  *winZ = result.z();
+    return GL_TRUE;
+}
+
+}
diff --git a/simgear/math/project.hxx b/simgear/math/project.hxx
new file mode 100644 (file)
index 0000000..40353a2
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright (C) 2010  Tim Moore moore@bricoworks.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.
+//
+#ifndef SIMGEAR_PROJECT_HXX
+#define SIMGEAR_PROJECT_HXX 1
+#include <osg/GL>
+
+namespace simgear
+{
+// Replacement for gluProject. OSG doesn't link in GLU anymore.
+extern GLint project(GLdouble objX, GLdouble objY, GLdouble objZ,
+                     const GLdouble *model, const GLdouble *proj,
+                     const GLint *view,
+                     GLdouble* winX, GLdouble* winY, GLdouble* winZ);
+}
+#endif
index 6c191a3d44b72d813712ba3b90221448c8a8e891..f1ff29df2df2b9af1c0f128353a989a9174efc5e 100644 (file)
 #include <windows.h>
 #endif
 
-#include <osg/GLU>
+#include <simgear/math/project.hxx>
 
 #include "tr.h"
 
@@ -541,7 +541,6 @@ int trEndTile(TRcontext *tr)
       return 1;
 }
 
-
 /*
  * Replacement for glRastePos3f() which avoids the problem with invalid
  * raster pos.
@@ -566,7 +565,8 @@ void trRasterPos3f(TRcontext *tr, GLfloat x, GLfloat y, GLfloat z)
       viewport[3] = tr->CurrentTileHeight;
 
       /* Project object coord to window coordinate */
-      if (gluProject(x, y, z, modelview, proj, viewport, &winX, &winY, &winZ)){
+      if (simgear::project(x, y, z, modelview, proj, viewport,
+                           &winX, &winY, &winZ)){
 
          /* set raster pos to window coord (0,0) */
          glMatrixMode(GL_MODELVIEW);