From f9eb43083a7706e7515e24d3a3500192b7467ce7 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 16 Apr 2003 09:22:33 +0000 Subject: [PATCH] Changed OsgSceneHandler so it re-uses osgUtil::SceneView project and modelview matrices. Changed the osgpick demo so that it uses the OsgSceneHandler's projection and modelview matrices where possible. --- examples/osgpick/osgpick.cpp | 30 +++++++++++++++++++---------- include/osgProducer/OsgSceneHandler | 4 ---- src/osgProducer/OsgSceneHandler.cpp | 10 ++++------ 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/examples/osgpick/osgpick.cpp b/examples/osgpick/osgpick.cpp index 980a864eb..f7cb931c8 100644 --- a/examples/osgpick/osgpick.cpp +++ b/examples/osgpick/osgpick.cpp @@ -125,12 +125,12 @@ void PickHandler::pick(const osgGA::GUIEventAdapter& ea) Producer::Camera* cmm=_viewer->getCamera(i); Producer::RenderSurface* rs = cmm->getRenderSurface(); - std::cout << "checking camara "<computePixelCoords(x,y,rs,pixel_x,pixel_y)) { - std::cout << " compute pixel coords "<getViewMatrix()) * - osg::Matrix(cmm->getProjectionMatrix())/* * - osg::Matrix::translate(1.0f,1.0f,1.0f) * - osg::Matrix::scale(0.5f,0.5f,0.5f)*/); - + //std::cout << " rx "<(cmm->getSceneHandler()); + osg::Matrix vum; + if (sh!=0 && sh->getModelViewMatrix()!=0 && sh->getProjectionMatrix()!=0) + { + vum.set((*(sh->getModelViewMatrix())) * + (*(sh->getProjectionMatrix()))); + } + else + { + vum.set(osg::Matrix(cmm->getViewMatrix()) * + osg::Matrix(cmm->getProjectionMatrix())/* * + osg::Matrix::translate(1.0f,1.0f,1.0f) * + osg::Matrix::scale(0.5f,0.5f,0.5f)*/); + } + osgUtil::PickVisitor iv; osgUtil::IntersectVisitor::HitList& hlist=iv.getHits(scene, vum, rx,ry); if (iv.hits()) diff --git a/include/osgProducer/OsgSceneHandler b/include/osgProducer/OsgSceneHandler index 5ec38b045..d0833721c 100644 --- a/include/osgProducer/OsgSceneHandler +++ b/include/osgProducer/OsgSceneHandler @@ -85,10 +85,6 @@ class OSGPRODUCER_EXPORT OsgSceneHandler : public Producer::Camera::SceneHandler virtual ~OsgSceneHandler() {} - - osg::ref_ptr mm; - osg::ref_ptr pm; - osg::ref_ptr _clearCallback; osg::ref_ptr _cullCallback; osg::ref_ptr _drawCallback; diff --git a/src/osgProducer/OsgSceneHandler.cpp b/src/osgProducer/OsgSceneHandler.cpp index e6926389d..2f0cbe066 100644 --- a/src/osgProducer/OsgSceneHandler.cpp +++ b/src/osgProducer/OsgSceneHandler.cpp @@ -20,8 +20,8 @@ using namespace osgProducer; OsgSceneHandler::OsgSceneHandler( osg::DisplaySettings *ds) : osgUtil::SceneView(ds) { - mm = new osg::RefMatrix; - pm = new osg::RefMatrix; + setProjectionMatrix( new osg::RefMatrix ); + setModelViewMatrix( new osg::RefMatrix ); } void OsgSceneHandler::init() @@ -46,10 +46,8 @@ void OsgSceneHandler::clearImplementation(Producer::Camera& /*camera*/) void OsgSceneHandler::cullImplementation(Producer::Camera &cam) { - pm->set(cam.getProjectionMatrix()); - mm->set(cam.getPositionAndAttitudeMatrix()); - setProjectionMatrix( pm.get() ); - setModelViewMatrix( mm.get() ); + getProjectionMatrix()->set(cam.getProjectionMatrix()); + getModelViewMatrix()->set(cam.getPositionAndAttitudeMatrix()); int x, y; unsigned int w, h;