#1 

08-10-2007 11:19:26

wetneb
Membres
Avatar de wetneb
Date d'inscription:
Messages: 29
IP: 90.26.214.197
Courriel  Site web

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


#2 

08-10-2007 13:27:52

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 195.83.163.5
Courriel

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:

irr::core::aabox3df<irr::f32> box=mAnimatedNode->getBoundingBox();
box=mAnimatedNode->getTransformation().transformBox(box); //( en coords parent : la "node generique"  )
mAnimatedNode->setPosition(mAnimatedNode->getPosition()-box.MinEdge);

Comme ca le MinEdge est a l'origine du node parent , en 0,0,0 ( coords parent ).


Hors ligne


#3 

09-10-2007 15:04:34

wetneb
Membres
Avatar de wetneb
Date d'inscription:
Messages: 29
IP: 90.26.214.197
Courriel  Site web

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


#4 

09-10-2007 15:28:12

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 195.83.163.5
Courriel

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


#5 

09-10-2007 16:52:32

wetneb
Membres
Avatar de wetneb
Date d'inscription:
Messages: 29
IP: 90.26.214.197
Courriel  Site web

Apparemment, tu as bien compris le problème, puisque ça fonctionne...

Merci bien !


Hors ligne


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
119 invités en ligne
membre en ligne: -
RSS Feed