Pages: 1
Bonjour à tous
Je suis en train de coder un début d'éditeur de niveau avec Irrlicht mais j'ai un petit problême pour ce qui est de récupérer le node sur lequel l'utilisateur clique .
J'ai une caméra FPS (le bouton échap permet de la désactiver pour pouvoir bouger la souris) , et un node dans ma scène (c'est sydney :p) .Le but est de récupérer le node "sydney" lorsque je clique dessus avec le bouton gauche de la souris et de l'entourer d'un rectangle (avec setDebugDataVisible(scene::EDS_BBOX); )
Mon problême est que lorsque je clique dessus , il ne se sélectionne pas , ou alors il faut que je déplace ma caméra juste devant le modèle
Voici ma portion de code , qui se trouve dans OnEvent :
if(event.MouseInput.Event== EMIE_LMOUSE_PRESSED_DOWN) { irr::core::line3df ray; ray = device->getSceneManager()->getSceneCollisionManager()->getRayFromScreenCoordinates(device->getCursorControl()->getPosition()); irr::scene::ISceneNode* Node; Node=device->getSceneManager()->getSceneCollisionManager()->getSceneNodeFromRayBB(ray,0); Node->setDebugDataVisible(scene::EDS_BBOX); }
Si quelqu'un pouvait m'éclairer , je lui en serais extrèmement reconnaissant ^^
merci d'avance ,
ramis
Hors ligne
C'est peut-être pas la réponse que tu attendais, mais que donne l'emploi de la fonction 'getSceneNodeFromCameraBB' ?
Hors ligne
Exactement la même chose , il faut que j'ai la caméra quasiment collée au modèle pour qu'il se sélectionne .
Hors ligne
Alors c'est peut-être du à la camera type FPS. Avec une camera standart, as-tu le même soucis ?
Hors ligne
Même problême , autant avec la caméra standard qu'avec la maya
j'ai bien essayé de modifier quelques paramêtres , mais je n'ai vraiment aucune idée de ce qui peut bien clocher .
Hors ligne
Quand j'ai ce genre de soucis, j'essaie de créer un code réduit, juste pour reproduire le soucis, avec un codage minimaliste et des media réduits au plus possible.
On y vois souvent plus clair. Cela serait cool si tu pouvais faire la même chose, cela permettrait qui plus est de facilement le poster pour aider à débbuguer, non ?
Hors ligne
Ton vecteur ne va pas plus loin que ta camera donc un normalize et un multiplicateur par la distance de détection voulue devrait marcher.
irr::core::line3df ray;
ray = device->getSceneManager()->getSceneCollisionManager()->getRayFromScreenCoordinates(device->getCursorControl()->getPosition());
ray.normalize();
ray *= 1000.0f;
Hors ligne
En fait j'ai le même genre de problème, en utilisant n'importe quel getSceneNode* du manager de collision et en fait il séléctionne par défault régulièrement un mesh qui est derrière au lieu de celui de devant.
J'ai testé en calculant les collisions avec les bounding box et le ray intersecte bien les deux.
Je suppose que c'est un bug de irrlicht ou alors je sais pas trop.
Hors ligne
Bon, je sais pas si cela peut aider, mais dans N3xtD, pour faire un test de picking j'utilise cette façon de faire:
Cela fonctionne, du moins jusqu'a preuve du contraire, et je n'ai pas de soucis de profondeur des mesh, il me selectionne toujours le mesh au premier
plan. (j'utilise toujours la version 1.5.0 d'Irrlicht).
a+
Hors ligne
Je trouve l'algo d'irrlicht vraiment bizarre de toute manière vu qu'il utilise les sommets de la bounding box enfin je vais tester ça par ce que ma version de l'algo de picking marche mieu pour ma scène mais c'est pas la panassé donc je vais tester ta méthode et je verrais bien.
Hors ligne
Ok, tiens nous au courant
Hors ligne
Bon ta méthode étant basé sur celle d'irrlicht me fais exactement pareil, donc du coup j'utilise ma propre méthode avec intersection de triangle scene node avec ray et ça marche bien mais sa doit pas être très optimisé.
Hors ligne
Voila enfin, j'ai fini pas trouver la réponse à mon problème !
Je sais maintenant comment "sélectionner" un mesh et pouvoir continuer à programmer mon jeu, merci à tous !
Hors ligne
Bonsoir,
dark calculator, j'ai eu le même problème obscure sur RoboticsCell pour la sélection d'objet, j'ai fini par développer ma propre méthode comme toi.
Bon courage.
Hors ligne
Bonjour ^^
Du coup quelle est la solution ?
Hors ligne
Pour ramis ça n'a pas marché mais c'est bien getSceneNodeFromCameraBB comme l'a dit tmyke.
Pour moi ça a toujours marché. Sinon c'est à la mimine
Hors ligne
Pages: 1