Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Thu Mar 28, 2024 8:37 am

All times are UTC




Post new topic Reply to topic  [ 11 posts ] 
Author Message
PostPosted: Sun Aug 09, 2009 10:27 pm 
Offline

Joined: Tue Jul 22, 2008 1:52 pm
Posts: 82
voila j'ai impression qu'il y a un bug dans raydium_ode_launcher
voici le code

Code:
initial=(dReal *)dBodyGetLinearVel(raydium_ode_element[from_element].body);
final[0]+=initial[0];
final[1]+=initial[1];
final[2]+=initial[2];
raydium_ode_element_addforce_3f(element,final[0],final[1],final[2]);


On prend une vélocité et on l'ajoute à une force
Vélocité s'est bien la vitesse?

Faudrait pas multiplier la vélocité par la masse de element?
Ou utiliser raydium_ode_element_linearvelocity_set

Car la si on a un élément lourd on va luit appliquer la même force qu'a un element léger sa va pas luit donner la même vélocité
Voila merci de me dir si s'est bien un bug ou si je me trompe car la j'ai launcher sur ma voiture et quand elle avance le missile par en arrière alors que si la voiture est arête pas de problème
Pour le moment j'ai ajouté une force à élément proportionnelle à la velociter donc ça marche mais ça me semble étrange


Top
 Profile  
 
PostPosted: Sun Aug 09, 2009 10:37 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
C'est justement pour ça que le paramètre "force" est demandé à l'appel. Si tu es dans un cas ou tu souhaites avoir une relation entre cette force et la masse de ton élément, à toi de calculer cette force.

Mais imagine que quelqu'un souhaite utiliser cette fonction pour permettre à un personnage de lancer des objets à la main : il attrape une bouteille et la jette deux mètres plus loin. Un peu plus loin, il attrape un bus ... et le jette à deux mètres ? :)

Il n'est pas raisonnable d'automatiser le calcul de force en fonction de le masse, car tout le monde ne souhaite pas cette fonctionnalité. Elle pourrait en revanche faire l'objet d'une "variante" de cette fonction, pourquoi pas.


Top
 Profile  
 
PostPosted: Mon Aug 10, 2009 1:01 pm 
Offline

Joined: Tue Jul 22, 2008 1:52 pm
Posts: 82
Pour la force je suit d'accord mais ça s'est calculé avant
Code:
raydium_math_rotate(dir,rot[0],rot[1],rot[2],res);
res[0]*=force;
res[1]*=force;
res[2]*=force;
dBodyVectorToWorld(raydium_ode_element[from_element].body,res[0],res[1],res[2],final);

Alors qu'ici s'est la force qu'on ajoute pour prendre en compte le déplacement du personnage au moment ou il lance l'objet imaginons qu'il lance une plume avec ce code il me semble que si il avance à 3km/h la plume va partir a 50km/h alors que si il la lance a l'arrêt elle va partir à 5km/h
la logique pour mois serait de mettre un raydium_ode_element_linearvelocity_set avec la valeur de dBodyGetLinearVel(raydium_ode_element[from_element].body);
Puis un raydium_ode_element_addforce_3f avec les valeurs de

Code:
raydium_math_rotate(dir,rot[0],rot[1],rot[2],res);
res[0]*=force;
res[1]*=force;
res[2]*=force;
dBodyVectorToWorld(raydium_ode_element[from_element].body,res[0],res[1],res[2],final);


Je vais voir si je peu faire un test facilement

edit
test effectuer et je confirme si le poids de l'objet est très faible 0.0005 il pare beaucoup plus vite quand l'élément qui le lance ce déplace

j'ai fait le test dans le jeux que je programme alor s'est un grand code mais si vous voulez je peu vous l'envoyer


Top
 Profile  
 
PostPosted: Mon Aug 10, 2009 1:47 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Ton premier post n'était pas très clair :) Il y a effectivement un problème de vélocité initiale de l'objet qui est lancé, et la solution que tu proposes semble la plus logique (dBodySetLinearVel). Ce qui me gêne beaucoup en revanche, c'est que si on applique une correction dans cette fonction, on casse la compatibilité de l'API ... Pour les applis officielles, ça ne touche que test6 et la contrib kartagony, mais potentiellement d'autres applications tierces peuvent êtres impactées.

Je vais jeter un œil à tout ça, merci de ta contribution.


Top
 Profile  
 
PostPosted: Mon Aug 10, 2009 2:26 pm 
Offline

Joined: Tue Jul 22, 2008 1:52 pm
Posts: 82
Je pense qu'une 2em version de la fonction serait une bonne solution
Merci de me tenir au courant pour savoir si je fait ma propre fonction ou si j'attends une mise à jour


Top
 Profile  
 
PostPosted: Mon Aug 10, 2009 2:54 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Corrigé dans la rev 863. Je te laisse me confirmer que c'est OK pour toi.


Top
 Profile  
 
PostPosted: Wed Aug 12, 2009 11:29 pm 
Offline

Joined: Tue Jul 22, 2008 1:52 pm
Posts: 82
Merci
Comme j'ai fait qu'elle que modification à raydium sa risque de me prendre un peut de temps

S'est la même fonction ou tu as changé le nom?


Top
 Profile  
 
PostPosted: Thu Aug 13, 2009 3:31 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Voilà le diff pour cette modification : http://raydium.org/svn.php?d=/trunk/raydium/ode.c&v=863

Si tu bosses avec une version modifiée de Raydium, il te serait surement très utile de bosser avec des diff (SVN tant qu'a faire) de tes modifications, justement ... sinon tu va avoir du mal à suivre les évolutions du moteur, alors que ça peut se faire automatiquement.


Top
 Profile  
 
PostPosted: Thu Aug 13, 2009 11:12 pm 
Offline

Joined: Tue Jul 22, 2008 1:52 pm
Posts: 82
Je le fait avec un comparateur de fichier (kdiff) sa prend pas beaucoup de temps mais faut le faire


Top
 Profile  
 
PostPosted: Sat Aug 15, 2009 1:48 pm 
Offline

Joined: Tue Jul 22, 2008 1:52 pm
Posts: 82
Ca me semble ok
Mais pour la logique du code je trouverais plus logique d'inverser les 2 linge

Code:
raydium_ode_element_addforce_3f(element,final[0],final[1],final[2]);
dBodySetLinearVel(raydium_ode_element[element].body,initial[0],initial[1],initial[2]);


Mais bon sa ne change pas le résulta et s'est peut-être ma vision des choses


Top
 Profile  
 
PostPosted: Sat Aug 15, 2009 1:52 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Ce sont des informations différentes. On accumule des forces dans les éléments et ils libèrent ces force sous forme de vélocité lors des itérations physiques suivantes. Donc l'ordre de ces deux lignes n'a pas d'importance, puisqu'elles agissent au sein d'une seule itération.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ] 

All times are UTC


Who is online

Users browsing this forum: Google [Bot] and 30 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group