Author Topic: Billard Demo  (Read 5273 times)

0 Members and 1 Guest are viewing this topic.

Jusan

  • Thug
  • *
  • Posts: 14
    • Page perso
Billard Demo
« on: February 05, 2007, 03:36:25 AM »
Afin de s'interesser a l'interaction entre plusieurs boules, voici un projet de Billard :

Version 1.0 :
- Modelisation du billard(blender) et des boules (meshes)
- Utilisation du moteur physique pour les collisions inter-boules
- La direction donnee a la boule blanche est celle du lookat de la camera

Screenshots :




Code source :
 http://vincent.manuceau.net/Info/Hyperion/Billard_v1.0.zip

A venir :
- un vrai billard americain (avec des trous, etc ...)
- ... si vous avez des idees, n'hesitez surtout pas !
« Last Edit: February 10, 2007, 06:50:16 PM by Jusan »

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2357
    • oZone3D.Net
Re: Billard Demo
« Reply #1 on: February 06, 2007, 02:36:46 PM »
Cool la demo  ;)
Mets tes images avec le tag comme ça elles apparaitrons directement dans le topic!
Sinon pour le problème d'interpénétration, je pense que ca vient d'Hyperion. J'ai du changer quelque chose dans les bounding sphères
des objets. Je réglerai ca pour la prochaine release d'hyperion.

Sinon tu n'as pas eu de problème particulier lors de la modélisation avec Blender et de l'export par rapport à Hyperion ?

Vivement la suite !

Jusan

  • Thug
  • *
  • Posts: 14
    • Page perso
Re: Billard Demo
« Reply #2 on: February 06, 2007, 06:27:32 PM »
Salut !
Pour le probleme des boules je pensais creer une "coque" invisible autour de chaque boule afin que l'interpenetration ne se voit pas, mais je ne sais pas si cela est possible .

Je suis un vrai debutant en programmation 3d/modelisation donc autant dire que j'ai vraiment eu du mal a modeliser la table de billard et la
faire correctement reagir avec les boules ... (j'ai cru comprendre que le moteur 3d ne prennait en compte que les primitives, et qu'il faut absolument les inserer a la position (0,0,0) avant de les placer correctement , il m'a donc fallut atomiser la table : d'ou un code xml tres lourd )

=> Est-t-il possible de creer des modeles 3d et faire novodeX les prendre en compte sans avoir a le faire primitive par primitive ?

MoI est genial pour debuter, mais il ne pourvoit pas de textures aux modeles (ils sont tout blancs une fois charges dans Hyperion),
ce que ne fait pas Blender .

=> Comment creer des modeles dans MoI et les inserer "correctement" dans Hyperion ?

Merci pour les encouragements, c'est tres motivant !

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2357
    • oZone3D.Net
Re: Billard Demo
« Reply #3 on: February 07, 2007, 10:06:16 AM »
Oui l'idée de créer une dummy sphère autour de chaque boule est une bonne idée. Cette sphère ne sera pas affichée mais servira juste pour le moteur physique. Après il te faudra en LUA updater la position des vraies boules avec celles des dummy sphères.

Pour la gestion des collisions et avec les outils disponible pour le moment, j'aurais mais une primitive plane ou un mesh plane comme objet de collision pour le plateau du billard et 4 autres planes pour chaque bord du billard. En fin de compte, le modèle 3D de la table de billard n'est pas utilisé pour les collision.

Le fait de positionner chaque sous mesh en (0, 0, 0) est necéssaire sinon il faudrait prendre en compte les notions de pivots et de joints de manière à "solidifier" le modèle. En étant initialisé à (0, 0, 0) par rapport au sol, le moteur Novodex sait que tous les meshes / models sont deja en contact avec le sol et donc ne les fera pas tomber.  Bon, il faut dire que toute l'implémentation du Novodex date de aout 2005 et qu'elle subira surement pas mal de modifications lorsque j'aurais mis à jour cette partie dans Hyperion.

Maintenant avec une petite dose de LUA il est possible d'automatiser le processus d'ajout des sous-meshes d'un modèle dans le moteur physique.

Peux envoyer un tout petit projet qui charge juste un modèle de MoI afin que je puisse voir le pb des textures ?

Flag

  • Thug
  • *
  • Posts: 26
Re: Billard Demo
« Reply #4 on: February 08, 2007, 10:44:20 AM »
Une autre solution pour les collisions sur les bords est de connaitre précisément le début et la fin des extrémités de ton mesh. Ainsi il ne sera pas nécessaire de rajouter des primitives (ou des meshes) sur lesquels il faudra appliquer la détection de collision, mais il sera plutôt question de poser des conditions matématiques (tout simplement l'équation d'une droite si on ne considère que le déplacement 2D de la boule, ou l'équation d'un plan si on veut autoriser un "saut" de la boule, donc mouvement 3D). Cela done l'avantage de controler préciséement ce que l'on fait et d'optimiser la démo. Une petite librairie mathématique sera bientôt dispo, qui permet de manipuler tous ces calculs sur les vecteurs.

Jusan

  • Thug
  • *
  • Posts: 14
    • Page perso
Billard Demo v1.1 Release !
« Reply #5 on: February 10, 2007, 07:00:18 PM »
Ajouts de la version 1.1 / New features of the 1.1 version :
- Un billard américain (avec des trous) / An american pool (with holes)
- Gestion physique des parois et des trous en LUA / LUA manages the physics of borders and holes

Screenshots :




Code source / Source code:
 http://vincent.manuceau.net/Info/Hyperion/Billard_v1.1.zip

A venir / Coming soon :
- Gestion du choc entre les boules (empecher l'interpénétration) / Tackling shock between the bullets (avoiding interpenetration)
« Last Edit: February 11, 2007, 10:38:23 AM by Jusan »

Flag

  • Thug
  • *
  • Posts: 26
Re: Billard Demo
« Reply #6 on: February 11, 2007, 08:23:01 PM »
Bien vu! C'est mieux avec les conditions mathématiques. Mais pour mieux manipuler ta boule blanche, tu devrais faire des calculs sur des vecteurs. Comme ça, tu pourras "anticiper" le prochain frame en calculant la position (rayon vecteur de chaque boule) et prévenir les collisions. Le tutorial de la chute libre, qui devrait bientôt être online, montre un exemple simple. Pour déclarer tes vecteurs position, tu peux déclarer une fonction vecteur:

function NewVector3()
   local v = {x=0.0, y=0.0, z=0.0};
   return(v);
end;

Ton vecteur position pour la boule blanche serait alors:

WhiteBallPosition = NewVector3()

Cela permet de faire des calculs de manière plus souple et précise (produit scalaire, vectoriel etc.).

Bravo. J'essaierai de participer pour l'évitement de la pénétration des balles.