Improba

Jeu en 3D avec simulation physique

Un jeu en 3D couplé avec une simulation physique en temps réel, c’est possible sur le Web ! 🎮 Et en une matinée en plus !

Récemment, j’ai eu l’occasion de jeter un œil sur un de mes premiers amours lors de ma thèse de doctorat : la bibliothèque C++ Bullet qui permet de simuler des interactions physiques complexes entre objets. Et j’ai découvert avec surprise que cette librairie est maintenant utilisable dans le Web (merci emscripten et wasm !!) très facilement.

Le principe est de prendre un code C++ et de le compiler vers du javascript ou, encore mieux, du WASM. WASM étant de l’assembleur exécutable directement par la plupart des navigateurs modernes. C’est très rapide. Après avoir compilé ainsi Bullet, on obtient deux fichiers : .wasm et .wasm.js qu’il est possible d’inclure dans une application Web.

A partir de là, notre idée fut d’intégrer Bullet au sein d’une application 3D développé dans le cadre de nos outils Improba (nos fameux “templates” !). Concrètement, cela signifiait associer Bullet, nos outils Improba (quasarJS, programmation orientée système) et ThreeJS en tant que moteur 3D.

Alors, sans trop réfléchir nous nous sommes lancés dans la création d’un jeu de destruction : on lance un boule qui va entrer en collision avec des objets posés sur un terrain plat. Et ces objets vont se fragmenter, tomber, rouler en fonction des dégâts causés par la boule.

Tout cela a pris la forme d’une page dédiée sur notre site de démo et nous a coûté une matinée et environ 800 lignes de code !

Le résultat est testable par vous en direct via le lien ci-dessous :
Démo !

Par Sylvain Meylan

3 novembre 2023

Autres articles qui pourraient vous intéresser

ConseilDéveloppementIngénierie

5 décembre 2023

Vous avez un projet ?

Contactez-nous

Vous avez une idée très précise et vous souhaitez un chiffrage ?
Un projet qui paraît infaisable car trop complexe ?

N’hésitez pas à nous solliciter, nous serons ravis de relever le défi avec vous.

Vous pouvez aussi nous contacter par :