IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Irrlicht Discussion :

[irrlicht] selection des objets de la scene


Sujet :

Irrlicht

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [irrlicht] selection des objets de la scene
    Bonjour,

    Tout nouveau ici j'espere trouve des reponses à 2-3 questions ou plutot problèmes que je rencontre avec irrlicht.

    EN fait je reprend les exemples fournis en les couplant. Mon probleme actuellement est de coupler le deplacament dans les maps avec le GUI.

    En fait j'ai reussi a creer une "interaction" :
    quand je laisse cliquer le bouton droit de la souris je peu me deplacer dans la map quake 3, quand je relache ce bouton, je libère la camera et peu naviguer dan les menus. Mon probleme : quand j'avance dans ma map et que je relache le bouton avant de lacher la fleche, la liberation de la caméra marche(je peu cliquer les boutons) mais cette meme caméra libre continue davancer...

    deuxieme probleme - question :
    je souhaiterai pouvoir lorsque je suis en "mode GUI" pouvoir selectionner les meshs de ma scene, mais je ne voi pas comment recupérer les objets sous la souris.

    Jespere avoir été clair (je croi pas...), si quelqu'un souhaite m'aider, je posterai des bouts de code...
    d'ailleurs ces derniers sont les bienvenus !

    D'avance Merci !!!

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Jespere avoir été clair (je croi pas...), si quelqu'un souhaite m'aider, je posterai des bouts de code...
    Effectivement, sans bout de code, cela va être difficile de t'aider... Peut-être une image serait bénéfique pour bien comprendre ton problème numéro 2.

    Jc

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Il est vrai que...

    voila mon code pour libérer ou activer la caméra FPS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    else if (event.EventType == EET_MOUSE_INPUT_EVENT )
    {
        switch(event.MouseInput.Event)
        {
            ICameraSceneNode* camera = device->getSceneManager()->getActiveCamera();
     
            case EMIE_RMOUSE_PRESSED_DOWN  :
                if ( camera != 0)
                {
                    camera->setInputReceiverEnabled(true);
                    device->getCursorControl()->setVisible(false);
                 }
                 break;
     
            case EMIE_RMOUSE_LEFT_UP   :
                    if (camera != 0)
                    {
                        camera->setInputReceiverEnabled(false);
                        device->getCursorControl()->setVisible(true);
                    }
                    break;
        } 
    }
    Donc lorsque je relache le bouton droit (EMIE_RMOUSE_LEFT_UP) je libère la caméra des interactions. Mais si je relache la fleche avancer apres avoir libérer la caméra, cette derniere continue d'avancer jusqu'à ce que je réactive la caméra et effectue un mouvement... (pareil avec les autres fleches...)

    Deuxieme problème :
    La sélection d'un "objet" je souhaiterai pouvoir sélectionner individuellement les 3 meshs (ici de magnifiques fées) depuis mon "mode GUI"... avec la grosse flèche classique en quelque sorte. J'ai compris comment faire avec un collisionManger depuis la camera mais avec la souris...

    Voici une image qui peut aider à comprendre :



    bon normalement mon gros curseur rouge est une joli fleche qui me permet de cliquer les boutons...

    Voial j'espère avoir été plus clair !

    Merci!

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je ne suis pas un spécialiste et sans ton code de gestion de mouvement et gestion de clavier, je ne pas aider plus que ceci :

    Pour le premier problème cela ne devrait pas être difficile. Il suffit de créer (si ce n'est pas déjà fait) une fonction Arrête pour ta caméra et l'appeler ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    case EMIE_RMOUSE_LEFT_UP   :
                    if (camera != 0)
                    {
                        camera->setInputReceiverEnabled(false);
                        camera->Arrete();
                        device->getCursorControl()->setVisible(true);
                    }
    Le code de cette fonction sera sûrement le même que celui que tu utilises lorsque t'appuies sur une touche donc soit tu fais un copier coller, soit tu copies ce code dans une fonction Arrete que tu appeleras ici et dans ta gestion du clavier (ce que je préfére bien sûr!).


    Pour le 2ème problème, si tu peux faire ta sélection en mode mouvement, c'est que tu as une fonction du style:

    Mesh getMesh(int x, int y) dans ta classe Camera qui retourne ce que tu cherches avec les coordonnées (x,y). Il suffirait alors de l'appeler au moment que tu le souhaites, que tu sois en mouvement ou sous le mode menu.

    Ou suis-je loin d'avoir compris la problématique?

    Jc

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Bon pour la caméra rien de neuf...

    Mais pour la selection, j'ai reussi à la réaliser en récupérant le rayon entre la souris et la caméra :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    core::line3d<f32> line = smgr->getSceneCollisionManager()->getRayFromScreenCoordinates(
        device->getCursorControl()->getPosition(),
        device->getSceneManager()->getActiveCamera());
     
    scene::ISceneNode* selectedSceneNode =
        smgr->getSceneCollisionManager()->getSceneNodeFromRayBB(line);
    Par contre mon "selectedSceneNode" peut etre nimporte quoi, d'un "bout" de la map à ma fée.
    Suis-je obliger de garder toutes mes fées dans une liste afin de la parcourir et de retrouver laquelle c'est ou un expert Irrlicht pourrez me trouver le truc?

    Merci!

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Pour ceux que ca interesseraient :

    Pour la selection des objets
    Il suffit de tester l'objet recu du collisionManager, si il s'agit d'un noeud de la map q3 on fait rien sinon...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (selectedSceneNode == q3node ) // map q3
    {
        selectedSceneNode = 0;
    }
     
    if (selectedSceneNode) // mes petites fées !!
    {
        ...
    }

    Pour la caméra, comme je desactiver le receveur d'evenements sur la caméra, cette derniere ne recevait jamais la notification "bouton avancer relaché" donc se stoppait pas !
    Pour palier ce probleme, a chaque libération de la caméra on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SEvent event;
    event.EventType = EET_KEY_INPUT_EVENT;
    event.KeyInput.Key = KEY_UP;
    event.KeyInput.PressedDown = false;
     
    Camera->OnEvent(event); 
     
    // pareil avec les autres touches de deplacement...
    Ainsi on envoi manuellement le fait que l'on a relaché la touche "UP". Il faut faire les 4 cas bien sur.

    A bientot !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Irrlicht 3D : Générer des objets 3D
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 12/07/2013, 00h20
  2. gestion des objets d'une scene
    Par crischprolch dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/05/2008, 19h02
  3. [POO] recherche d'une fiche via des objets select
    Par 3psilOn dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/03/2008, 14h38
  4. Réponses: 1
    Dernier message: 13/09/2006, 12h50
  5. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo