Raydium 3D Game Engine
https://memak.raydium.org/

Probleme pour appliquer une force
https://memak.raydium.org/viewtopic.php?f=8&t=612
Page 1 of 1

Author:  Akito [ Fri Jan 12, 2007 9:01 am ]
Post subject:  Probleme pour appliquer une force

Voila, suite a un projet de création d'un simulateur d'avion sur raydium, nous avons rencontré un probleme au niveau de l'application d'une force sur le nez de l'avion.

L'avion doit décollé a la vertical... c'est a dire le nez de lavion en l'air, puis se met a plat pour pouvoir avancé correctement.

Le probleme c'est que la force que nous appliquons pour faire avancer l'avion doit pouvoir changer en fonction de la position de l'avion ( vertical - au démarage ou attérissage- ou horizontal - en vol normal - ).

donc ma question:
comment applpiquer une force dans le repere relatif a l'objet et non pas à la carte ?


Merci d'avance

Author:  Xfennec [ Fri Jan 12, 2007 10:24 pm ]
Post subject: 

Salut,

A l'heure actuelle, la bonne manière de réaliser ceci est d'utiliser un moteur de type RAYDIUM_ODE_MOTOR_ROCKET. Ces moteurs se comportents donc comme des fusées (action -> réaction), sont positionnés et peuvent êtres orientés au besoin. Sans forcément être exhaustif, voilà un rapide résumé de l'utilisation de ces derniers :

création :
Code:
raydium_ode_motor_create("react",object,RAYDIUM_ODE_MOTOR_ROCKET);
raydium_ode_motor_rocket_set_name("react","element",0,0,0); // position sur l'élément


utilisation :
Code:
raydium_ode_motor_speed_name("react",0.2);
raydium_ode_motor_rocket_orientation_name("react",0,90,180); // orientation


Tout ça est extrait de test6.c, et la doc doit parler de ces moteurs plus ou moins dans le détail. N'hésite pas à répondre ici si tout ça n'est pas clair.

Author:  ouille [ Fri Jan 12, 2007 10:47 pm ]
Post subject:  Application d'une force

Bonjour,

Ode permet d'appliquer une force donnée en un point donné.

D'après le code d'ode la force et la position sont transposées dans le repère de l'objet avant leur application.

La solution moteur "rocket" me semble plus facile à utiliser et doit surement faire la meme chose (xfennec ?)



Code:
void dBodyAddRelForceAtRelPos (dBodyID b, dReal fx, dReal fy, dReal fz,
                dReal px, dReal py, dReal pz)
{
  dAASSERT (b);
  dVector3 frel,prel,f,p;
  frel[0] = fx;
  frel[1] = fy;
  frel[2] = fz;
  frel[3] = 0;
  prel[0] = px;
  prel[1] = py;
  prel[2] = pz;
  prel[3] = 0;
  dMULTIPLY0_331 (f,b->R,frel);
  dMULTIPLY0_331 (p,b->R,prel);
  b->facc[0] += f[0];
  b->facc[1] += f[1];
  b->facc[2] += f[2];
  dCROSS (b->tacc,+=,p,f);
}

Author:  Xfennec [ Fri Jan 12, 2007 11:50 pm ]
Post subject: 

Les moteurs rockets utilisent effectivement dBodyAddRelForceAtRelPos() en interne :) (raydium/ode.c, ligne 2114)

Author:  ouille [ Sun Jan 14, 2007 8:51 pm ]
Post subject:  attention amalgame

Bonjour,

Effectivement les rocket utilisent un
Code:
 dBodyAddRelForceAtRelPos


Par contre il y a peut être un risque de confusion en speed et force.

D'ailleurs la primitive est claire:
Code:
void raydium_ode_motor_speed(int j, dReal force)


la vitesse dans le cas d'une rocket est donc la force appliquée.

Pendant combien de temps cette force est elle appliquée ? (un timestep )

Author:  Xfennec [ Sun Jan 14, 2007 9:06 pm ]
Post subject: 

Ta clarification sur les termes est tout à fait correcte. La même fonction servant pour les différents types de moteurs, le vocabulaire est effectivement approximatif.

L'objectif de la fonction ...motor_speed() est de configurer le moteur : la force s'applique donc jusqu'a un ordre contraire (force=0, par exemple).

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/