Message #7821
Sujet: Comment faire avancer un modele 3d dans la direction où il pointe ?
| Type | Date | Auteur | Contenu |
|---|---|---|---|
| Création du message | 25-01-2010 22:36:49 | jonath313 |
Je suis entrein de faire le déplacement d'un objet en 3d mais je n'arrive pas à le faire aler dans la direction où il pointe j'ai essayer multiples methodes mais je ne trouve pas, j'ai essayer de faire une rotation progressive pedant un déplacement à droite ou à guauche mais je me suis aperçu que l'objet ne tournait pas autour de lui même mais autour d'un orbite par raport à la caméra ...
Mon code il y a pas grand chose mais au cas où : #include "CEventReceiver2.h" CEventReceiver::CEventReceiver(irr::scene::IAnimatedMeshSceneNode* Nmodele)//revoilà notre constructeur { m_Nmodele = Nmodele;//On pointe le mesh passe en parametre. m_isAvance = false;//Par défaut , le modele est immobile .Donc le booléen qui indique si l'on bouge est à false m_animrun=true;//et comme l'animation n'est du coup pas "courir" , on met notre booléen à false aussi m_isRecule=false; m_isDroite=false; m_isGauche=false; } bool CEventReceiver::OnEvent(const irr::SEvent &event)//En cas d'évenement : { //On verifie que le pointeur est ok if(m_Nmodele != 0 //Qu'il s'agit d'un event concernant un appui/relachement de touche && event.EventType == irr::EET_KEY_INPUT_EVENT //Qu'il s'agit bien de la touche z && event.KeyInput.Key == irr::KEY_KEY_Z) { //Si il s'agit d'un appui if(event.KeyInput.PressedDown == true) m_isAvance = true;//On passe notre booléen "est en train de bouger" à true //Sinon c'est un relachement else m_isAvance = false;//Donc , comme on doit s'arrêter , on met ce même booléen à false //L'event est traite, on retourne true return true; } //Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_S) { if(event.KeyInput.PressedDown == true) m_isRecule = true; else m_isRecule = false; return true; } //Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_D) { if(event.KeyInput.PressedDown == true) m_isDroite = true; else m_isDroite = false; return true; } //Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_Q) { if(event.KeyInput.PressedDown == true) m_isGauche = true; else m_isGauche = false; return true; } //Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false return false; } void CEventReceiver::majPosMesh()//revoilà notre chère fonction de mise à jour de la position { //On verifie que le pointeur vers le mesh est //ok et que la touche est enfoncee if(m_Nmodele != 0 && m_isAvance == true) { //On commence par recuperer la position actuelle irr::core::vector3df v = m_Nmodele->getPosition(); //On y ajoute la valeur de deplacement v.Z += 0.1f; //On renvoie la nouvelle position .Sydney va avancer !!! m_Nmodele->setPosition(v); } if(m_Nmodele != 0 && m_isRecule == true) { irr::core::vector3df v = m_Nmodele->getPosition(); v.Z -= 1.1f; m_Nmodele->setPosition(v); } if(m_Nmodele != 0 && m_isDroite == true) { //irr::core::vector3df v = m_Nmodele->getPosition(); // v.X += 1.1f; // m_Nmodele->setPosition(v); irr::core::vector3df w = m_Nmodele->getRotation(); w.Y += 0.1f; m_Nmodele->setRotation(w); } if(m_Nmodele != 0 && m_isGauche == true) { // irr::core::vector3df v = m_Nmodele->getPosition(); // v.X -= 1.1f; // m_Nmodele->setPosition(v); irr::core::vector3df w = m_Nmodele->getRotation(); w.Y -= 0.1f; m_Nmodele->setRotation(w); } } void CEventReceiver::majAnimMesh()//Ici , on met à jour l'animation { if(m_Nmodele != 0 && m_isAvance == true && m_animrun ==false) //Si le pointeur vers le mesh est ok , si l'on bouge et si l'on n'a pas encore mis à jour l'animation ... { m_Nmodele->setMD2Animation(EMAT_STAND);//on passe à l'animation "courir" m_Nmodele->setFrameLoop(1,44); m_Nmodele->setAnimationSpeed(22); m_animrun=true;//on declare que l'animation courir est bien en trainde se derouler } if(m_Nmodele != 0 && m_isAvance == false && m_animrun ==true) //Si le pointeur vers le mesh est ok , si l'on ne bouge plus et si l'on n'a pas encore mis à jour l'animation ... { m_Nmodele->setMD2Animation(EMAT_RUN);//on passe à l'animation "rester en place" m_animrun=false;//et on declare que l'animation courir ne se deroule plus , du coup } } Merci pour vôtre aide |
| Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
|---|---|---|---|---|
|
Préférences cookies Corrections |
![]() ![]() ![]() ![]() |
Propulsé par Django xhtml 1.0 css 2.1 |
884 membres 1440 sujets 11337 messages |
Dernier membre inscrit: Saidov17 154 invités en ligne membre en ligne: - RSS Feed |