1 / 19

OpenSceneGraph

OpenSceneGraph. Benoît POULARD <ben.poulard@gmail.com>. OpenSceneGraph. chargement d'un objet et ajout dans la scène positionner un objet création d'un viewer événement clavier/souris callback et visitor. Benoît POULARD <ben.poulard@gmail.com>. OpenSceneGraph.

ita
Download Presentation

OpenSceneGraph

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OpenSceneGraph Benoît POULARD <ben.poulard@gmail.com>

  2. OpenSceneGraph chargement d'un objet et ajout dans la scène positionner un objet création d'un viewer événement clavier/souris callback et visitor Benoît POULARD <ben.poulard@gmail.com>

  3. OpenSceneGraph chargement d'un objet et ajout dans la scène positionner un objet création d'un viewer événement clavier/souris callback et visitor Benoît POULARD <ben.poulard@gmail.com>

  4. Charger un Objet // fichier à charger std::string file(''objet.osg''); //le chargement d'un fichier retourne un pointeur sur un nœud, // si on ne peut pas charger le fichier retourne NULL osg::ref_ptr<osg::Node> model = osgDB::readNodeFile(file); if(!model)‏ std::cout<<'' Impossible de charger ''<<file<<std::endl; // ajout du node dans le graphe osg::ref_ptr<osg::Group> root = new osg::Group(); root->addChild(model.get()); format 3D: osg, ive, 3ds, obj, flt, ... osgDB : extensible ( voir plugins osgdb_xxx)‏ Benoît POULARD <ben.poulard@gmail.com>

  5. OpenSceneGraph chargement d'un objet et ajout dans la scène positionner un objet création d'un viewer événement clavier/souris callback et visitor Benoît POULARD <ben.poulard@gmail.com>

  6. Positionner un Objet somme des transformations rencontrées dans le graphe de la racine jusqu'au nœud correspondant à l'objet les transformations sont des nœuds du graphe parent enfant osg::PositionAttitudeTransform position : osg::Vec3 orientation : osg::Quat Benoît POULARD <ben.poulard@gmail.com>

  7. Positionner un Objet RACINE Tranformation1 Soleil Terre Tranformation2 Lune Benoît POULARD <ben.poulard@gmail.com>

  8. Positionner un Objet // racine de la scene osg::ref_ptr<osg::Group> scene = new osg::Group; // racine du sous graphe osg::ref_ptr<osg::Group> racine = new osg::Group; //on considère les objets suivant chargés correctement osg::ref_ptr<osg::Node> Soleil = osgDB::readNodeFile(''...''); osg::ref_ptr<osg::Node> Terre = osgDB::readNodeFile(''...''); osg::ref_ptr<osg::Node> Lune = osgDB::readNodeFile(''...''); // on considère les transformations suivantes correctes osg::ref_ptr<osg::PositionAttitudeTransform> transformation1 = new PositionAttitudeTransform osg::ref_ptr<osg::PositionAttitudeTransform> transformation2 = new PositionAttitudeTransform // on construit le graphe racine->addChild( Soleil.get() ); racine->addChild( transformation1.get() ); transformation1->addChild( Terre.get() ); transformation1->addChild( transformation2.get() ); transformation2->addChild( Lune.get() ); // on ajoute le sous graphe a la scene. scene->addChild( racine.get() ); Benoît POULARD <ben.poulard@gmail.com>

  9. OpenSceneGraph chargement d'un objet et ajout dans la scène positionner un objet création d'un viewer événement clavier/souris callback et visitor Benoît POULARD <ben.poulard@gmail.com>

  10. Création d'un Viewer // déclaration et initialisation du viewer osgViewer::Viewer viewer(arguments); // racine de la scene osg::ref_ptr<osg::Group> root = new osg::Group(); // on passe la scene au viewer viewer.setSceneData(root.get()); ... permet de visualiser le rendu de la scène utilisation de osgViewer Benoît POULARD <ben.poulard@gmail.com>

  11. Création d'un Viewer ... // init de la fenetre viewer.realize(); // on rentre dans la boucle de rendu viewer.run(); Benoît POULARD <ben.poulard@gmail.com>

  12. OpenSceneGraph chargement d'un objet et ajout dans la scène positionner un objet création d'un viewer événement clavier/souris callback et visitor Benoît POULARD <ben.poulard@gmail.com>

  13. événements clavier/souris osgGA type d'événement: DOUBLECLICK, DRAG, MOVE, KEYDOWN, KEYUP, FRAME, RESIZE, SCROLL, ajout d'un gestionnaire au viewer class KeyboardMouseManager : public osgGA::GUIEventHandler { public: ... virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)‏ Benoît POULARD <ben.poulard@gmail.com>

  14. événement clavier/souris bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)‏ {     switch(ea.getEventType())‏     {        case(osgGA::GUIEventAdapter::KEYDOWN): // appui sur une touche           switch(ea.getKey())‏          {             case osgGA::GUIEventAdapter::KEY_Left:          }       break;       case osgGA::GUIEventAdapter::PUSH: // clic souris      // coordonnées écran du clic       ea.getX();       ea.getY();      break;    } } Benoît POULARD <ben.poulard@gmail.com>

  15. événement clavier/souris // initialisation du gestionnaire clavier/souris osg::ref_ptr<KeyboardMouseManager> keyboard_mouse_manager = new KeyboardMouseManager(); // ajout du gestionnaire a la liste des gestionnaire d'evenement du viewer viewer.getEventHandlers().push_front(keyboard_mouse_manager.get()); Ajout du gestionnaire au viewer Benoît POULARD <ben.poulard@gmail.com>

  16. OpenSceneGraph chargement d'un objet et ajout dans la scène positionner un objet création d'un viewer événement clavier/souris callback et visitor Benoît POULARD <ben.poulard@gmail.com>

  17. callback/visitor traverse le graphe de façon cyclique : callback de façon ponctuelle : visitor Benoît POULARD <ben.poulard@gmail.com>

  18. callback/visitor // declaration d'un callback class MonCallback : public osg::NodeCallback { public: MonCallback(); virtual void operator()(osg::Node* node, osg::NodeVisitor* nv); //... }; // on associe le callback a un node node->setUpdateCallback(new MonCallback ); callback Benoît POULARD <ben.poulard@gmail.com>

  19. callback/visitor // déclaration d'un visitor class MonVisitor: public osg::NodeVisitor { public: UpdateCallbackVisitor(); // regarder la declaration de osg::NodeVisitor pour les surcharge possible de apply(...). virtual void apply(osg:: ... obj); }; // on applique le visitor a un node node->accept(new MonCallback ); visitor Benoît POULARD <ben.poulard@gmail.com>

More Related