Bonjour,
Je cherche à replacer le point d'origine d'un objet 3D en utilisant Irrlicht. Les objets que je manipule sont des pavés (géométriquement parlant, hein!). J'ai deux scene node : un IAnimatedSceneNode parenté à un ISceneNode. Le IAnimatedSceneNode représente l'objet 3D. Je cherche donc à ce que le coin du pavé en bas à gauche (Y+ est le haut) corresponde au point 0, 0, 0 du scene node générique (IScenNode, le parent). Pour cela, j'ai joué sur la position du IAnimatedSceneNode, en récupérant les dimensions du pavé.
J'ai fait comme ça :
// mAnimatedNode est l'enfant, celui qui représente l'objet 3D core::vector3df deplacement = mAnimatedNode->getTransformedBoundingBox().MinEdge; core::vector3df box = mAnimatedNode->getTransformedBoundingBox().getExtent(); deplacement.invert(); deplacement.X -= box.X; deplacement.Z -= box.Z; deplacement *= mEchelle; mAnimatedNode->setPosition(deplacement);
Mais ça ne semble pas fonctionner avec tous les objets 3D.
Y aurait-il une méthode interne au moteur pour faire ça ? Ou sinon comment faire ?
Merci !
Hors ligne
deplacement=mAnimatedNode->getTransformedBoundingBox().MinEdge ( coords global )
mAnimatedNode->setPosition(deplacement) ( coords relavite : coords parent
Edit :
Pas super comme reponse : )
Je n'avais pas le temps de faire mieu.
A vrai dire je ne comprends pas bien ton code ( a moins que je ne "captes" pas bien le probleme aussi) , j'essayerai comme ca:
Comme ca le MinEdge est a l'origine du node parent , en 0,0,0 ( coords parent ).
Dernière modification par firnafin (08-10-2007 21:11:11)
Hors ligne
a moins que je ne "captes" pas bien le probleme aussi
Moi non plus, je ne comprends pas très bien ce que j'ai fait :S ...
La méthode "getTransformation()" n'est apparemment pas présente à l'appel.
C'est probablement "getRelativeTransformation()", donc je l'ai remplacé.
Erreurs du compilo :
/media/sda2/rpg/EditeurBatiment/module.cpp:126: erreur: no match for «operator=" in «box = #«obj_type_ref" not supported by dump_expr#<expression error>().irr::core::CMatrix4<T>::transformBox [with T = float](((irr::core::aabbox3d<float>&)(& box)))" /usr/local/irrlicht-1.3.1/include/aabbox3d.h:22: note: candidats sont: irr::core::aabbox3d<float>& irr::core::aabbox3d<float>::operator=(const irr::core::aabbox3d<float>&) Process terminated with status 1 (0 minutes, 11 seconds) 2 errors, 0 warnings
Hors ligne
j'ai ecri n'importe quoi j' avais fait ca de tete sans la doc .
Effectivement il s'agit bien de getRelativeTransformation(), pour ce qui est de l'erreur cela vient du fait que transformBox est du type void donc elle modifie directement box ,la ligne devient simplement :
mAnimatedNode->getTransformation().transformBox(box);
Teste ,et si ca ne marche pas c'est que je n'ai pas compris le probleme.
Hors ligne
Apparemment, tu as bien compris le problème, puisque ça fonctionne...
Merci bien !
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 16 invités en ligne Aucun membre connecté RSS Feed |