Bonjour à tous!
Voilà mon problème: je souhaiterais faire tourner un node avec ma souris. L'idée c'est que je clique sur la souris, et que tant que je reste appuyé et que je la bouge en même temps, mon node pivote en conséquence, de la même manière que dans la plupart des RPG où l'on peut faire tourner la caméra autour de son personnage. Seulement, après maintes recherches sur Internet et dans la documentation d'Irrlicht, je n'ai pas trouvé mon bonheur.
Auriez vous une idée pour remédier à mon problème?
Merci d'avance!
Hors ligne
_pSceneManager->addCameraSceneNodeMaya();
addCameraSceneNodeMaya();
permet justement de tourner autour d'un objet. Essaye et tu verra le comportement de cette camera.
a moins que je me trompe.
a+
Hors ligne
De base je déclare une caméra fixe, qui pour mon projet, doit le rester.
Tu suggères que j'en déclare une autre et que je la lie à mon node?
Hors ligne
Tu peux en ajouter plusieurs et de différents type
ensuite tu rend actif une caméra avec la méthode : _pSceneManager->setActiveCamera(_pCamera);
_pCamera étant la node Caméra.
Donc dans ton cas: tu cré une caméra fixe et lorsque tu décide de fixer un des objets dans ton monde (Un personnage par exemple) , tu peux utilisé une autre node camera (addCameraSceneNodeMaya())
Si je ne me trompe pas, si tu passe un objet node parent à la méthode : addCameraSceneNodeMaya(_parent);
cette caméra devrait toujours regarder dans la direction du node parent.et cela te permet de tourner autour sans soucis. (Attention a vérifier)
Hors ligne
Dans l'ensemble, ta solution fonctionne plus ou moins. Les problèmes sont que lors des changements de caméra active, la Maya semble avoir des problèmes. De plus, le node n'est pas centré, l'idée étant de le garder au milieu de ma scène. Peut-être que chercher à faire tourner le node au lieu de la caméra serait plus efficace.
Hors ligne
Et en utilisant la methode SetTarget() ???
nodeCamera->setTarget(nodePersonnage->getAbsolutePosition()); ??
Hors ligne
J'avais essayé: ça me place la camera au milieu de mon personnage.
Le problème aussi, c'est dès que j'appelle:
m_pSceneManager->setActiveCamera(m_pCameraMaya);
je ne peux plus faire tourner la caméra, comme si je perdais toute interaction avec les clics de la souris!
Hors ligne
et en ajoutant :
m_pCameraMaya->setInputReceiverEnabled(true);
a chaque fois que tu fais m_pSceneManager->setActiveCamera(m_pCameraMaya);
afin de spécifier au moteur que ta camera accepte les entrées
a tester biensur !!
Hors ligne
Je viens de tester juste en déclarant uniquement la caméra maya, et même là je ne peux pas la déplacer, comme si je déclarais une caméra fixe!
Il doit y avoir quelque chose dans mon initialisation qui doit faire que la caméra a ce problème, je vais essayer de corriger ça.
Merci beaucoup pour ton aide en tout cas!
Hors ligne
Je continue à chercher mais si jamais quelqu'un d'autre a une autre idée, je suis également preneur!
Merci
Hors ligne
en principe tu devrait avoir une classe eventreceveir, dans laquelle tu gère les evenements clavier/souris. (c'est dans les exemples fournits avec irrlicht)
avec cette classe tu attribue des fonctions au touches clavier et souris, Ensuite il te suffit d'attribuer node->setRotation(...) à la touche que tu veut.
Hors ligne
Oui il y a la classe dérivable EventReceiver mais le probleme de Wohran c'est que lorsqu'il utilise plusieurs caméras et les actives avec la méthode SetActiveCamera, la node Camera Type Maya perd sa propre gestion des évenements.
Wohran, essaye tout simplement de supprimer la node Camera et la rajouter à nouveau lorsque tu l'active. Je sais cela n'est certainement pas très propre comme programmation mais en attendant de trouver, cela te permettra de pouvoir continuer dans l'avancement de ton développement.
Hors ligne
je ne comprend pas ce que vient faire la camera dans cette histoire j'ai peut-être raté un épisode, mais d'après le titre du post->Faire tourner un node avec la souris
Tu dit à l'ordi :
- SI (je déplace ma souris vers la gauche ET une touche est enfoncée) TU FAIT tourner le node vers la gauche.
-etc...
Hors ligne
@ Thoced: Mes problèmes de caméra persistent, je continue à chercher. Comme je te l'ai dit, même en déclarant une seule caméra, que je décalre de type Maya, il reste impossible de la faire pivoter.
@ nico: Oui, cette méhode fonctionne mais ce n'est pas ça que je cherche à faire: l'idée c'est que quand je bouge ma souris tout en appuyant sur le bouton gauche par exemple, mon node tourne en suivant le mouvement de la souris. Si je ne bouge plus la souris, le node doit garder la position qu'il a prise en dernier, en déplacant ma souris vers la droite, il doit tourner vers la droite, etc...
Hors ligne
Wohran :
l'idée c'est que quand je bouge ma souris tout en appuyant sur le bouton gauche par exemple, mon node tourne en suivant le mouvement de la souris. Si je ne bouge plus la souris, le node doit garder la position qu'il a prise en dernier, en déplacant ma souris vers la droite, il doit tourner vers la droite, etc...
Bein c'est exactement le resultat que tu aura si tu fait ce que j'ai dit
je ne voit pas quel est le problème.
Hors ligne
Ben le truc c'est qu'en appliquant ta méthode, le node n'est pas fluide quand il bouge, c'est juste un changement d'une position à une autre
Hors ligne
ah et thoced: j'arrive à avoir mes caméras qui fonctionnent toutes les deux. Seulement, quand la Maya est active, elle écrase la gestion des événements sur les clicks que j'avais déjà codé, et j'ai besoin de les garder
Hors ligne
bein tu rajoute une animation, tu as une classe exprès. d'ailleur tu devrait y jeter un oeil, tu verra les animators des cameras.
http://irrlicht.sourceforge.net/docu/cl … mator.html
Hors ligne
C'est bon ça marche, j'ai réussi à le faire sans l'animator ^^
Par contre, dans le setRotation() de mon node, je renseigne les coordonnées de ma souris, certes, mais je n'ai pas de coordonnée Z pour celle-ci. Du coup, mon objet tourne autour des deux axes X et Y mais pas du troisième Z.
Hors ligne
et oui, la souris gère que 2 dimensions, tu peut utiliser la molette pour faire la troisième mais je le déconseille(beaucoup ne l'on pas). utilise soit le clavier, soit tu fait comme dans blender, c'est à dire que tu selectionne d'abord la dimension x, y ou z, et ensuite tu tourne.
Hors ligne
Non j'ai rien dit, c'est bon ^^
Merci à tous pour vos réponses
Hors ligne
Par contre maintenant, j'ai un nouveau problème ...
J'ai déjà essayé plusieurs méthodes mais je n'ai toujours pas trouvé de solutions: quand je clique sur mon node et que je bouge la souris, il bouge sans problème, suis bien le mouvement de la souris, etc... niquel.
Seulement, voilà mon problème. Admettons que je clique et déplace mon node. Il se déplace, ok. Je voudrais qu'en cliquant, disons de l'autre coté de la fenêtre, le node garde sa dernière position. Car là, lorsque je clique ailleurs pour le faire tourner à nouveau, il se retourne d'un coup, comme s'il n'avait pas déja bougé auparavent.
J'espère que vous comprenez ce que je veux dire, j'ai un peu de mal à expliquer. Si c'est la cas, voyez vous une solution?
Merci!
Hors ligne
Tu veut dire que tu déplace ton Node, puis tu tente de le faire tournez sa marche sauf qu'il revient à sa position d'origine, c'est bien sa ?
Et comment sa "de l'autre coter de la fenêtre" ?
Quand tu modifie la rotation et la position de ton mesh, tu l'enregistre dans une variable de type "irr::core::vector3df" (ou qu'elle que chose comme (se n'est qu'une supposition)), et peut-être que c'elle qui contiens la rotation et l'autre qui contiens la position sont peut-être différente.
Ou peut-être que je dit n'importer quoi......mystère !!!
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 15 invités en ligne Aucun membre connecté RSS Feed |