Historique des modifications - Message

Message #4230

Sujet: Problème de rotation/déplacement


Type Date Auteur Contenu
Dernière modification 11-06-2008 10:02:38 firnafin
Il font quoi au lycée de nos jours ... big_smile
Si tu commences à toucher a la programmation orientée 3D il va obligatoirement te falloir les bases en mathematique de l'espace : vecteur et trigonometrie et plus tard matrice.
Il y a 3 types de repere : le local , le global , et le repere parent , ce dernier tu peux l'oublier pour le moment.
Le global ne bouge pas , ne tourne pas ,il a toujour au centre du monde : (0,0,0) ( orientation non directe ).
Le Local tourne et bougge avec l'objet ( ici Nmodele ) il lui est accroché.
Donc quand tu tournes puis que tu avances ( v.Z +=1.0f ) l'axe d'avancement est celui du repere global alors qu'il faudrait que se soit celui du local afin de tenir compte de la rotation faite.
Le plus simple et si la node n'a qu'une seul rotation possible ,c'est d'utiliser la trigornometrie :
irr::core::vector3df rotation= Nmodele->getRotation();
irr::core::vector3df axe_z_local=irr::core::vector3df(ccos(rotation.Y),0,sin(rotation.Y));
axe_z_local.normalize();
 
if( move== forward ){
 Nmodele->setPosition(Nmodele->getPosition()+axe_z_local)

}
Création du message 11-06-2008 09:47:37 firnafin
Il font quoi au lycée de nos jours ... big_smile
Si tu commences à toucher a la programmation orientée 3D il va obligatoirement te falloir les bases en mathematique de l'espace : vecteur et trigonometrie et plus tard matrice.
Il y a 3 types de repere : le local , le global , et le repere parent , ce dernier tu peux l'oublier pour le moment.
Le global ne bouge pas , ne tourne pas ,il a toujour au centre du monde : (0,0,0) ( orientation non directe ).
Le Local tourne et bougge avec l'objet ( ici Nmodele ) il lui est accroché.
Donc quand tu tournes puis que tu avances ( v.Z +=1.0f ) l'axe d'avancement est celui du repere global alors qu'il faudrait que se soit celui du local afin de tenir compte de la rotation faite.
Le plus simple et si la node n'a qu'une seul rotation possible ,c'est d'utiliser la trigornometrie :
irr::core::vector3df rotation= Nmodele->getRotation();
irr::core::vector3df axe_z_local=irr::core::vector3df(ccos(rotation.Y),0,sin(rotation.Y));
axe_z_local.normalize();
 
if( move== forward ){
 Nmodele->setPosition(Nmodele->getPosition()+axe_z_local)

}

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
125 invités en ligne
membre en ligne: -
RSS Feed