#0 

15-02-2011 12:22:45

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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


#1 

15-02-2011 12:57:00

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

_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


#2 

15-02-2011 13:05:23

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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


#3 

15-02-2011 13:33:59

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

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


#4 

15-02-2011 14:46:31

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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


#5 

15-02-2011 16:35:16

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

Et en utilisant la methode SetTarget() ???

nodeCamera->setTarget(nodePersonnage->getAbsolutePosition()); ??

Hors ligne


#6 

15-02-2011 16:45:46

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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


#7 

15-02-2011 17:15:12

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

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


#8 

15-02-2011 17:23:08

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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


#9 

16-02-2011 10:56:24

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

Je continue à chercher mais si jamais quelqu'un d'autre a une autre idée, je suis également preneur!

Merci

Hors ligne


#10 

16-02-2011 13:13:13

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

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


#11 

16-02-2011 13:26:58

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

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


#12 

16-02-2011 13:47:51

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

je ne comprend pas ce que vient faire la camera dans cette histoire wink 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


#13 

16-02-2011 14:29:36

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

@ 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


#14 

16-02-2011 14:47:12

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

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 wink
je ne voit pas quel est le problème.

Hors ligne


#15 

16-02-2011 16:13:29

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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


#16 

16-02-2011 16:34:24

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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 hmm

Hors ligne


#17 

16-02-2011 17:15:35

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

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


#18 

17-02-2011 10:12:19

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

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


#19 

17-02-2011 13:55:00

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

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


#20 

17-02-2011 13:55:24

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

Non j'ai rien dit, c'est bon ^^
Merci à tous pour vos réponses smile

Hors ligne


#21 

18-02-2011 10:29:12

Wohran
Membre
Date d'inscription: 15-02-2011
Messages: 13

Par contre maintenant, j'ai un nouveau problème hmm...

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? hmm

Merci!

Hors ligne


#22 

19-02-2011 04:03:05

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
Site web

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
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
882 membres
1429 sujets
11119 messages
Dernier membre inscrit: LiseBuisson96
36 invités en ligne
Aucun membre connecté
RSS Feed