Bonjour
le projet est trop lourd il fait 1.5mo au lieu de 1mo maximum
vous pouvez le télécharger sur mon ftp:
http://www.hacking.free.fr/paris8/continous_physic_billard.zip
(l'exe est dans le zip, il faut renommer le .ex_)
c'est un projet pour la fac qui m'a permis de bien avancer en opengl et en méca
la physique est gérée de manière continue
les librairies utilisées:
SDL
GL
glu
gsl (pour la résolution d'équations du 4ième degré)
glew (pour la lumière avec shader et les vbo)
il manque les choses suivantes pour en faire un super jeu de billard, mais je ne pense pas arriver au bout de tous ces problèmes:
- rajout des règles (8ball, snooker, billard français, ...)
- suppression du bug qui arrive parfois et qui fait sortir les boules de la table
- que la canne ne traverse plus les boules et la table
- permettre de faire sauter les boules avec la canne (le moteur physique peut déja les faire sauter)
- amélioraton du framerate et rajout de lumières, ombres mieux gérées...
- rajouter une gestion des collisions sur les forces et pas seulement sur la vélocité (c'est ça qui fait sortir les boules de la table ou bloquer le jeu parfois)
Source / Exemple :
// faire avancer la simulation de t secondes
int run_physic(Kbillard *b, Kreal t) {
if (!b->nb_collision) {
b->total_time += t;
return 1; // s'il n'y a pas de boule
}
while(t > 0) { // on va avancer la simulation de t secondes
int i = 0;
Kreal breakpoint = b->collision[0]->t;
if (breakpoint == -1) {
return 1;
}
if (breakpoint > b->total_time + t) { // si ça va arriver dans plus longtemps que t alors on quitte
b->total_time += t;
actualiser_positions(b);
return 0;
}
t -= breakpoint - b->total_time;
b->total_time = breakpoint;
faire_avancer_boule(b,b->collision[i]->a);
if (b->collision[i]->type == BALL) {
faire_avancer_boule(b,b->collision[i]->b);
}
traiter_collision(b);
printf("%f\n", b->ball[0]->angular_velocity.y);
getchar();
actualiser_collisions(b,b->collision[i]->a);
if (b->collision[i]->type == BALL) {
actualiser_collisions(b,b->collision[i]->b);
}
trier_collisions(b);
}
actualiser_positions(b);
return 0;
}
Conclusion :
il faut une carte graphique pour le faire fonctionner car j'utilise les shaders et les vbos !
ce n'est pas moi qui ai fait la table et la room je les ai piquées dans un jeu de billard :)
j'ai mis une version de gsl avec le .lib et le .a:
http://www.hacking.free.fr/paris8/gsl.rar
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.