$(top_builddir)/simgear/debug/libsgdebug.a \
$(top_builddir)/simgear/structure/libsgstructure.a \
$(base_LIBS)
-
+
SGGeometryTest_SOURCES = SGGeometryTest.cxx
SGGeometryTest_LDADD = \
$(top_builddir)/simgear/debug/libsgdebug.a \
$(top_builddir)/simgear/structure/libsgstructure.a \
$(base_LIBS)
-
+
lib_LIBRARIES = libsgmath.a
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)
--- /dev/null
+// 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;
+}
+
+}
--- /dev/null
+// 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
#include <windows.h>
#endif
-#include <osg/GLU>
+#include <simgear/math/project.hxx>
#include "tr.h"
return 1;
}
-
/*
* Replacement for glRastePos3f() which avoids the problem with invalid
* raster pos.
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);