Aide - Recherche - Membres - Calendrier
Version complète : debut avec havok
Centre de Formation Director - Forums Adobe Director > Aide sur Director > Shockwave 3D
vincent0808
bonjour

je debute avec havok est j'ai un probleme, je dois piloter une nacelle, ma nacelle est enfant de mon bras1 qui lui est enfant de bras2, etc...
donc si je fait une rotation sur le bras2, ça deplace le bras1 qui deplace la nacelle (logique si on suit la hierarchie), donc jusque là pas de souci ça fonctionne tres bien,le probleme c'est que je veut gerer les collisions avec havok, et que quand je met make movable rigid model sur ma nacelle, elle se met a tomber (oui car elle est en l'air au debut)

Comment faire pour ne plus qu'elle tombe

merci

PS: je sais ma question a l'air conne icon_redface.gif
ghost
il y a plein de façons de faire

tu peux par exemple utiliser un dashpot linéaire qui force la montgolfier à rester tout près du bout du bras mecanique
vincent0808
Oui mais le bras doit etre movableRB ou fixedRB ?

Ce que je comprends pas c'est qu'il est enfant du bras, donc il devrait rester accrocher non ?
Je comprends pas encore tres bien havok.


Sinon je fais des makeAngularImpulse sur mon bras articule pour lui faire une rotation et dès que la nacelle rentre en collision avec le chasis et que j'insiste un peu, le bras part dans tous les sens icon_eek.gif

Si quelqu'un a une idée je suis preneur parce que là je m'en sors pas.
ghost
Havok ne gère pas avec les relations parent / enfant
vincent0808
ça c'est embetant effectivement surtout avec des machines mecaniques complexe ou tout est lié.
Sinon pour le linearDashpot, quelqu'un peut m'expliquer ce qu'est les damping ?
ghost
Je crois que tu peux contraindre certaines choses dans havok (sans être sûr) , avant l'exécution d'havok, forcer la position des rigidBodies sur celles des models animés (si ça ne se fait pas tout seul) puis les mettre en mode pinned (=immobiles)

de cete façon:

-bras.pinned = false
-mouvement du bras (je crois que le rigidBody suit automatiquement le model si on le fait bouger)
-bras.pinned = true

havok.step(...)


concernant le damping pour faire simple c'est l'élasticité,
pour faire compliqué : http://en.wikipedia.org/wiki/Damping
vincent0808
oui ça fonctionne...a moitié, je fais un attemptMoveTo() sur le bras mais la nacelle passe a travers les autres modeles.
Et attemptMoveTo() ne marche que sur un seul bras icon_eek.gif
vincent0808
est ce que quelqu'un sait comment faire bouger les bras svp ?

merci
ghost
Non tu n'as pas compris, ce n'est pas havok qui fait bouger les bras, havok fait juste bouger la nacelle

on machinFrame

1/les bras bougent et on force leurs rigidbodies a avoir la même position (je sais plus si c'est automatique ou pas, teste)

2/ on met les rigidbody du bras en mode pinned pour qu'ils puissent pas bouger pendant la phase physique

3/ on exécute havok et on fait bouger la balle avec un registerStepCallBack ou un ressort qui marche tout seul

end
ghost
Il y a plein d'autres façons de faire et ça dépend du contexte. Si tu veux une aide efficace il faut que tu nous donne clairement l'énoncé détaillé de l'exrcice.
vincent0808
Voici en fichier joint un imprime écran de la nacelle.
Il y a 3 mouvements :
1/rotation de la tourelle qui fait bouger tout l'ensemble sur 360°
2/rotation du 1er bras (celui attaché a la tourelle)
3/rotation du 2eme bras

Bien sur la nacelle reste toujours parallele au sol. Le tout est piloté par les touches du clavier.
Voila il me reste plus qu'a gerer les collisions avec la nacelle.
J'ai tout mit en movable rigid body sauf le chassis qui est en fixes rigid body.

j'ai fait un attemptMoveTo(vector(0,0,0),angle de mon bras1 + 1) et ça deplace bien mon bras sauf que la nacelle traverse tout.

Donc voila ou j'en suis
ghost
"Les collisions avec la nacelle" ne veut rien dire icon_mrgreen.gif

Les collisions c'est toujours entre deux objets, donc entre la nacelle et autre chose.

Avec quels objets la nacelle doit elle rentrer en collision? Le terrain seulement ou les bras également ?

LA nacelle a-t-elle toujours lamême orientation ou peut-elle pivoter?
vincent0808
la nacelle peut entrer en collision avec le terrain et le chassis (rambarde principalement)

La nacelle en elle meme ne peut pas pivoter, elle reste toujours parallele au sol mais l'ensemble peut pivoter ce qui fait que la nacelle peut aussi bien se trouver a l'avant du vehicule comme a l'arriere.
ghost
Dans cas c'est très facile (laisse tomber havok):

collision aabb / plan
collision aabb / aabb

"aabb" signifie "axis aligned bounding box" = boite qui est toujours à 90 degrés

une boite se définit par deux vecteurs:
-son centre
-un vecteur demi-taille ( ou demi-diagonale ou centre->point bas-droite-fond )

enfin pour faire le test de collision ce n'est plus qu'une affaire de soustractions.

je veut tester si il ya collision entre la boite 1 et 2:

-calcul vecteur centreBoite1 => centreBoite2
-calcul vecteur demiTailleBoite1 + demiTailleBoite2

-comparaison de x y et z entre les valeurs absolues du premier et les valeurs du second

s'il y a collision on rejette sur l'axe ou la penetration est la plus petite
vincent0808
Citation (ghost @ Mar 17 2008, 03:06 PM) *
on machinFrame

1/les bras bougent et on force leurs rigidbodies a avoir la même position (je sais plus si c'est automatique ou pas, teste)

2/ on met les rigidbody du bras en mode pinned pour qu'ils puissent pas bouger pendant la phase physique

3/ on exécute havok et on fait bouger la balle avec un registerStepCallBack ou un ressort qui marche tout seul

end



J'ai pas compris l'etape 1 et 3

Pour l'etape 1, ça veut dire que je fais bouger mes bras avec director?; normalement oui les rigidBodies prennent la meme position (moi j'avais tester dans l'autre sens.

et pour l'etape 3, on lance havok ? havok se lance des le debut de l'anim normalement a moins que j'ai louper quelquechose icon_confused.gif
ghost
Tu n'as pas besoin de t'encombrer avec une usine à gaz comme havok pour faire un simple test de collision boites alignées.

(En plus Havok a été supprimé de director11 pour un moteur physique plus facile d'usage et omins cher, donc ça sert plus à rien de te lancer dedans à moins d'en être fan...)
ghost
Mon explication des collision boîtes est incompréhensible, j'essaye d ereexpliquer en quelques lignes de pseudo code:

Lingo



vecC1C2 = vecCenterBox2 - vecCenterBox1 --vecteur centre1 -> centre2
vecC1C2_bin = vector( (vecC1C2.x>0)*2-1 , (vecC1C2.y>0)*2-1 , (vecC1C2.z>0)*2-1 ) --version +1 -1 (binaire) pour avoir le sens

--vecteur penetration absolu
penVecAbs = vecHalfSizeBox1 + vecHalfSizeBox2 - vector(abs(vecC1C2.x),abs(vecC1C2.y),abs(vecC1C2.z))

--test de penetration sur les 3 axes

if penVecAbs.x > 0 then
if penVecAbs.y > 0 then
if penVecAbs.z > 0 then

--vecteur de penetration rabattu sur l'axe le plus petit en retrouvant le sens avec le vecteur binaire

if penVec.x<=penVec.y and penVec.x<=penVec.z then return vector(penVecAbs.x*vecC1C2_bin.x,0,0)
else if penVec.y<=penVec.z and penVec.y<=penVec.x then return vector(0,penVecAbs.y*vecC1C2_bin.y,0)
else if penVec.z<=penVec.y and penVec.z<=penVec.x then return vector(0,0,penVecAbs.z*vecC1C2_bin.z)


end if
end if
end if

return vector(0,0,0) --pas de penetration detectée, pas de collision



puis déplacer la boite1 selon le négatif du vecteur de penetration.

(j'ai pas testé y'a peut etre des erreurs dans le code mais c'est pour expliquer le principe)
vincent0808
ok merci beaucoup, je vais tester ça. c'est a mettre dans un enterFrame je suppose ?
ghost
Sur une routine oui mais ça peut aussi être un event prepareFrame, stepFrame, timeout... ça dépend comment tu organises ton appli
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.