Sujet : algo deplacements |
LeGreg |
ooops desole pour le abs(),
mais je vois que tu as corrigé de toi meme :)
a, c'est une acceleration donc des metres par secondes au carré (m/(s^2)).
pour que ce soit realiste faudrait deja que tu definisses dans quoi tu te deplaces (voiture, vaisseau spatial, bateau, a pied, etc..). L'acceleration de la pesanteur (quand tu tombes) c'est 9 m/(s^2) et c'est beaucoup pour un etre humain mais ce n'est pas beaucoup pour une fusée.
Ca ne te donne pas de combien tu te deplaces en une seconde, pour ca il faut intégrer la formule et ca depend des autres forces qui se sont exercées sur toi (le frottement fluide va limiter ta vitesse maximale).
Donc deux possibilités: soit tu fais un jeu super realiste, tu decides que une unité = 1 metre, et tu calques ton déplacement sur celui d'un vehicule existant. Soit tu ne fixes rien du tout, et tu trouves la valeur d'acceleration au hasard jusqu'a ce que tu sois satisfait. De toute facon cette formule ne marche pas trop pour simuler le deplacement d'un personnage qui marche (plutot pour un vehicule simplifié comme dans WipeOut).
pour le strafe, en fait tu orientes ton acceleration non plus dans la direction ou tu regardes mais dans la direction ou tu avances. C'est ce que tu fais avec turn+strafe, sauf qu'effectivement lorsque tu avances et strafe, tu vas te deplacer d'un angle de 45° par rapport a ton angle de vue. Evidemment faut prendre en compte tous les cas (4 au total) ou tu avances et strafes sur la gauche, recules et strafes sur la droite etc.. (+45, -45, +135, -135)
Autre possibilité, tu considères chaque action strafe + avance séparement et tu as le vecteur acceleration = acceleration avance + acceleration strafe.
si acceleration avance c'est (a1* sin, -a1 * cos), acceleration strafe c'est (a2*cos, a2*sin) ou (-a2*cos, -a2*sin).
LeGreg |
LeGreg |
ooops desole pour le abs(),
mais je vois que tu as corrigé de toi meme :)
a, c'est une acceleration donc des metres par secondes au carré (m/(s^2)).
pour que ce soit realiste faudrait deja que tu definisses dans quoi tu te deplaces (voiture, vaisseau spatial, bateau, a pied, etc..). L'acceleration de la pesanteur (quand tu tombes) c'est 9 m/(s^2) et c'est beaucoup pour un etre humain mais ce n'est pas beaucoup pour une fusée.
Ca ne te donne pas de combien tu te deplaces en une seconde, pour ca il faut intégrer la formule et ca depend des autres forces qui se sont exercées sur toi (le frottement fluide va limiter ta vitesse maximale).
Donc deux possibilités: soit tu fais un jeu super realiste, tu decides que une unité = 1 metre, et tu calques ton déplacement sur celui d'un vehicule existant. Soit tu ne fixes rien du tout, et tu trouves la valeur d'acceleration au hasard jusqu'a ce que tu sois satisfait. De toute facon cette formule ne marche pas trop pour simuler le deplacement d'un personnage qui marche (plutot pour un vehicule simplifié comme dans WipeOut).
pour le strafe, en fait tu orientes ton acceleration non plus dans la direction ou tu regardes mais dans la direction ou tu avances. C'est ce que tu fais avec turn+strafe, sauf qu'effectivement lorsque tu avances et strafe, tu vas te deplacer d'un angle de 45° par rapport a ton angle de vue. Evidemment faut prendre en compte tous les cas (4 au total) ou tu avances et strafes sur la gauche, recules et strafes sur la droite etc.. (+45, -45, +135, -135)
Autre possibilité, tu considères chaque action strafe + avance séparement et tu as le vecteur acceleration = acceleration avance + acceleration strafe.
si acceleration avance c'est (a1* sin, -a1 * cos), acceleration strafe c'est (a2*cos, a2*sin) ou (-a2*cos, -a2*sin).
LeGreg |
red faction |
[:prosterne] merci bcp ca marche now
ya juste encore qq ptit truc que jarrive pas a regler :
Code :
- //init
- f=0.8;straf=0;temps=0.1;
- //
- draw(){
- ax= a*sin((turn+straf)*3.14/180)-vx*f;
- az=-a*cos((turn+straf)*3.14/180)-vz*f;
- vx+=ax*temps;
- vz+=az*temps;
- x+=vx*temps;
- z+=vz*temps;
- glRotated(tilt, 1, 0, 0);
- glRotated(turn, 0, 1, 0);
- glTranslated(x,0,z);
- //gluLookAt(0,0,-10,0,0,0,x,1,0);
- drawscene();
-
- glFlush();
-
-
- if (keys['s']) {
- a=20;
- }
- else if (keys['z']){
- a=-20;
- }
- else if (keys['q']){
- a=20;
- straf=90;
- }
- else if (keys['d']){
- a=-20;
- straf=90;
- }
- else{
- a=0;
- straf=0;
- }
- ...
|
-->deja jai vire le abs() car ca causait des probleme lorsque le perso se retournait
-->temps represente le temps ecoule depuis la derniere frame mais en quoi ?? secondes ?? pour que si je met a=20 je bouge alors de 20 unite par secondes
--> si on appuie sur q et z en meme temps ca cause un prob, jai pense faire straf=45 mais ce ne sera ptet pas tres realiste |