Historique des modifications - Message

Message #4230

Sujet: Problème de rotation/déplacement


TypeDateAuteurContenu
Dernière modification11-06-2008 10:02:38firnafin
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 message11-06-2008 09:47:37firnafin
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

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
100 invités en ligne
membre en ligne: -
RSS Feed