diff --git a/examples/osgpick/osgpick.cpp b/examples/osgpick/osgpick.cpp index 012af5f25..0ba406263 100644 --- a/examples/osgpick/osgpick.cpp +++ b/examples/osgpick/osgpick.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -108,18 +109,19 @@ void PickHandler::pick(const osgGA::GUIEventAdapter& ea) } osg::Node* createHUD(osgText::Text* updateText) -{ // create the hud. derived from osgHud.cpp +{ + + // create the hud. derived from osgHud.cpp // adds a set of quads, each in a separate Geode - which can be picked individually // eg to be used as a menuing/help system! // Can pick texts too! - osg::MatrixTransform* modelview_abs = new osg::MatrixTransform; - modelview_abs->setReferenceFrame(osg::Transform::ABSOLUTE_RF); - modelview_abs->setMatrix(osg::Matrix::identity()); - - osg::Projection* projection = new osg::Projection; - projection->setMatrix(osg::Matrix::ortho2D(0,1280,0,1024)); - projection->addChild(modelview_abs); - + + osg::CameraNode* hudCamera = new osg::CameraNode; + hudCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); + hudCamera->setProjectionMatrixAsOrtho2D(0,1280,0,1024); + hudCamera->setViewMatrix(osg::Matrix::identity()); + hudCamera->setRenderOrder(osg::CameraNode::POST_RENDER); + hudCamera->setClearMask(GL_DEPTH_BUFFER_BIT); std::string timesFont("fonts/times.ttf"); @@ -133,7 +135,7 @@ osg::Node* createHUD(osgText::Text* updateText) stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF); stateset->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF); geode->setName("simple"); - modelview_abs->addChild(geode); + hudCamera->addChild(geode); osgText::Text* text = new osgText::Text; geode->addDrawable( text ); @@ -172,7 +174,7 @@ osg::Node* createHUD(osgText::Text* updateText) quad->setVertexArray(vertices); quad->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4)); geode->addDrawable(quad); - modelview_abs->addChild(geode); + hudCamera->addChild(geode); position += delta; } @@ -186,7 +188,7 @@ osg::Node* createHUD(osgText::Text* updateText) stateset->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF); geode->setName("The text label"); geode->addDrawable( updateText ); - modelview_abs->addChild(geode); + hudCamera->addChild(geode); updateText->setCharacterSize(20.0f); updateText->setFont(timesFont); @@ -197,7 +199,7 @@ osg::Node* createHUD(osgText::Text* updateText) position += delta; } - return projection; + return hudCamera; } diff --git a/src/osgProducer/Viewer.cpp b/src/osgProducer/Viewer.cpp index 5633a0507..cdc706f1a 100644 --- a/src/osgProducer/Viewer.cpp +++ b/src/osgProducer/Viewer.cpp @@ -88,17 +88,16 @@ public: _nodeMaskOverride = mask; } - virtual void apply(osg::Projection& pr) - { // stack the intersect rays, transform to new projection, traverse - // Assumes that the Projection is an absolute projection + void handleProjectionMatrix(const osg::Matrixd& matrix, osg::Group& node) + { osg::Matrixd mt; - mt.invert(pr.getMatrix()); + mt.invert(matrix); osg::Vec3 npt=osg::Vec3(xp,yp,-1.0f) * mt, farpt=osg::Vec3(xp,yp,1.0f) * mt; // traversing the nodes children, using the projection direction - for (unsigned int i=0; i