Have a look on the Third person view example... You get your code from it, and this example works well, so you should use it a base code, and modify it to have what you are looking for. You will be able to reply yourself I think.
2008/12/17 olfat ibrahim <[email protected]> > sorry for much truble but i looked and found two ways can not understand > how they work > > the first way is to use call back : > > so i added to the code : > > > class UpdateCallback : public osg::NodeCallback > { > virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) > { > std::cout<<"update callback - pre traverse"<<node<<std::endl; > traverse(node,nv); > std::cout<<"update callback - post traverse"<<node<<std::endl; > } > }; > > and to the main loop : > > mt->setUpdateCallback(new UpdateCallback()); > > but it made no changes. > > the second way : > > i added to the code : > > > // Given a Camera, create a wireframe representation of its > // view frustum. Create a default representation if camera==NULL. > osg::Node* > makeFrustumFromCamera( osg::Camera* camera ) > { > osg::Node* loadedMode35 ; > loadedMode35 = osgDB::readNodeFile("red.3DS"); > > // Projection and ModelView matrices > osg::Matrixd proj; > osg::Matrixd mv; > if (camera) > { > proj = camera->getProjectionMatrix(); > mv = camera->getViewMatrix(); > } > else > { > // Create some kind of reasonable default Projection matrix. > proj.makePerspective( 30., 1., 1., 10. ); > // leave mv as identity > } > > // Get near and far from the Projection matrix. > const double near = proj(3,2) / (proj(2,2)-1.0); > const double far = proj(3,2) / (1.0+proj(2,2)); > > // Get the sides of the near plane. > const double nLeft = near * (proj(2,0)-1.0) / proj(0,0); > const double nRight = near * (1.0+proj(2,0)) / proj(0,0); > const double nTop = near * (1.0+proj(2,1)) / proj(1,1); > const double nBottom = near * (proj(2,1)-1.0) / proj(1,1); > > // Get the sides of the far plane. > const double fLeft = far * (proj(2,0)-1.0) / proj(0,0); > const double fRight = far * (1.0+proj(2,0)) / proj(0,0); > const double fTop = far * (1.0+proj(2,1)) / proj(1,1); > const double fBottom = far * (proj(2,1)-1.0) / proj(1,1); > > > // Create parent MatrixTransform to transform the view volume by > // the inverse ModelView matrix. > osg::MatrixTransform* mt = new osg::MatrixTransform; > mt->setMatrix( osg::Matrixd::inverse( mv ) ); > mt->addChild( loadedMode35 ); > > return mt; > } > > > and i was suppose to change the loop to : > > while (!viewer.done()) > { > // Update the wireframe frustum > root->removeChild( 0, 1 ); > root->insertChild( 0, makeFrustumFromCamera( > viewer.getView( 0 )->getCamera() ) ); > > viewer.frame(); > } > > > but i was not sure what is this suppose to do ?? > also i did not find "viewer.getView" function or equivelant to it > > > is there some way to help me fix or understand one of the two previous ways > or is there a way to directly update the node positon from the camira > position in the loop like using : > > osg::NodeCallback* nc = new osg::AnimationPathCallback( > ),osg::Vec3(0.0f,0.0f,1.0f),osg::inDegrees()); > transform->setUpdateCallback(nc); > > or transform(x,y,z) > rotate (h,p,r); > > and get it directly from the current camera position matrix ? > > > please help > --- On Wed, 12/17/08, Vincent Bourdier <[email protected]> wrote: > > > From: Vincent Bourdier <[email protected]> > > Subject: Re: [osg-users] current View Point > > To: [email protected], "OpenSceneGraph Users" < > [email protected]> > > Date: Wednesday, December 17, 2008, 3:09 AM > > Each frame, you have to update your matrix. For the moment > > you set it, next > > you frame() the viewer, nothing more. Matrix will no update > > itself. > > > > To update it, do it in the viewer loop (after/before > > frame()), or create a > > new nodeCallback. Have a look on nodeCallback to see how to > > use it. > > > > Regards, > > Vincent. > > > > 2008/12/17 olfat ibrahim <[email protected]> > > > > > i have two viewers and put the scene in groups one for > > the whole scene and > > > one for the pointer i want to move: > > > > > > osg::Group* root = new osg::Group; // groupp have all > > other objects > > > osg::Group* Mainroot = new osg::Group; // the > > whole scene > > > Mainroot->addChild(root); > > > > > > osgViewer::Viewer viewer; > > > osgViewer::Viewer viewer1; > > > > > > //set left camera for left view > > > osg::ref_ptr<osg::Camera> cameraL = new > > osg::Camera; > > > ... > > > // add the matrix transformation > > > osg::MatrixTransform* mt = new osg::MatrixTransform; > > > mt->setMatrix( > > cameraL->getViewMatrix() ); > > > mt->addChild( loadedMode35 ); > > > Mainroot->addChild(mt); > > > > > > viewer.setCameraManipulator( > > keyswitchManipulatorL.get() ); > > > > > > //set right camera for the right view > > > osg::ref_ptr<osg::Camera> cameraR = new > > osg::Camera; > > > > > > viewer1.setCameraManipulator( > > keyswitchManipulatorR.get() ); > > > > > > > > > > > > //load data for each viewer > > > viewer.setSceneData( root); > > > viewer1.setSceneData( Mainroot); > > > > > > > > > //run the viewer > > > while( !viewer.done() ) > > > { > > > // fire off the cull and draw traversals of the > > scene. > > > viewer.frame(); > > > viewer1.frame(); > > > > > > } > > > > > > now the object i used did not move what is the problem > > ?? > > > > > > --- On Wed, 12/17/08, Vincent Bourdier > > <[email protected]> wrote: > > > > > > > From: Vincent Bourdier > > <[email protected]> > > > > Subject: Re: [osg-users] current View Point > > > > To: [email protected], "OpenSceneGraph > > Users" < > > > [email protected]> > > > > Date: Wednesday, December 17, 2008, 2:46 AM > > > > Hi, > > > > > > > > Please, make replies to your posts ! do not make > > a new > > > > thread each time ... > > > > If you reply to your post, we will have all the > > mailing > > > > history of this > > > > question, and we can see the evolution of the > > problem. > > > > > > > > Next, just with this code, we cannot see what the > > problem > > > > is. > > > > Tell us what is good in your code, what you want > > to do with > > > > this code... > > > > > > > > For your problem : maybe it works, but you need a > > callback > > > > or a loop to see > > > > the matrix changing in real-time... Not easy to > > understand > > > > this little peace > > > > of code without more explanations. > > > > > > > > Regards, > > > > Vincent. > > > > > > > > 2008/12/16 olfat ibrahim > > <[email protected]> > > > > > > > > > hi : > > > > > > > > > > iam creating a program that have two windows > > one i > > > > make a drive in it and > > > > > the other is like a map i want to put > > indecator in the > > > > 2nd window that > > > > > indicate my current position in the first > > one > > > > > > > > > > i used the following code but nothing > > happend: > > > > > > > > > > > > > > > // Projection and ModelView matrices > > > > > osg::Matrixd proj; > > > > > osg::Matrixd mv; > > > > > ... > > > > > proj = cameraL->getProjectionMatrix(); > > > > > > > > > > mv = cameraL->getViewMatrix(); > > > > > // Create parent > > MatrixTransform to > > > > transform the view > > > > > volume by > > > > > // the inverse ModelView > > matrix. > > > > > osg::MatrixTransform* mt = > > new > > > > osg::MatrixTransform; > > > > > mt->setMatrix( > > > > osg::Matrixd::inverse( mv ) ); > > > > > mt->addChild( loadedMode35 > > ); > > > > > Mainroot->addChild(mt); > > > > > > > > > > ... > > > > > > > > > > > > > > > can some one tell me where iam going wrong > > ?? > > > > > > > > > > > > > > > tahnks > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > osg-users mailing list > > > > > [email protected] > > > > > > > > > > > > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > > > > > > > > > > > > > _______________________________________________ > > > osg-users mailing list > > > [email protected] > > > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

