A dynamic character controller for Bullet?

Or, how I tried to create a dynamic character controller for Bullet, but eventually (almost?) gave up.

Motivations

I like spending some time using the Bullet physics library, I already wrote some articles about my experiments with it. This time, I wanted to create a custom character controller.

Bullet alread provides a (kinematic) character controller, but in general it is not regarded as a good one. I also tried to study a bit its code, but, in my opinion, it adds many complications without reason, and even something like managing in the correct way the velocity is a big problem with it. Indeed, Erwin Coumans himself (the main Bullet developer) said that btKinematicCharacterController is not supported anymore.

Therefore I decided to write my own one.

There are two kinds of character controller: kinematic ones and dynamic ones.

The former use the Physics engine, if any, just for collisions, and compute all the movements by themselves. This was the only way at the beginning of the video games, since there was not any Physics engine at all, but only some code for specific purposes. … [Leggi il resto]

Alcuni appunti su Bullet e raylib

In passato mi è già capitato di parlare di Bullet, lo avevo usato qualche volta tanto tempo fa, tanto che ne avevo fatto anche due-tre articoli nel 2012!

Da allora molte cose sono cambiate, tranne le API di Bullet, che almeno superficialmente sono più o meno sempre quelle, e l’interesse che sporadicamente rinasce in me per quella libreria.

Una cosa che è cambiata è che ho cominciato a lavorare su un software di modellazione 3D, e in particolare mi occupo della parte dei plugin, di fare esempi a scopo di documentazione e cose del genere. Così avevo avuto l’idea di provare a scriverne uno di integrazione con Bullet.

L’idea alla fine non è partita, ma a me era rimasta la voglia di sperimentare un po’ con questo motore, e in particolare anche vedere come si comporta con la parte di softbody.

Così nelle ultime due settimane ho un po’ lavorato a questi esempi e avevo l’idea di farne anche alcuni carini, ma mi sa che metterò un po’ in pausa l’idea, quindi intanto volevo condividere qui alcune delle cose che ho imparato. … [Leggi il resto]

irrBullet su Linux

In questi giorni ho voluto testare un po’ l’integrazione di Irrlicht con Bullet.

Dovete sapere che ci sono diversi modi di farla: o usando irrBullet, o irrBt o usando direttamente le API di Bullet.

Io ho provato direttamente la terza, perché su un post del forum di Irrlicht consigliavano così. Io invece consiglio il contrario: oltre che “reinventare la ruota”, dovete fare tutto a mano e dopo un po’ ci si annoia, specialmente per le linee di debug. Se siete de programmatori bravi ok, ma io, che in C++ non sono così esperto, ho deciso di cambiare strada non solo perché questa mi pare più difficile delle altre, ma anche perché vorrei evitare di avere troppi bug.

Così la scelta era tra irrBullet e irrBt.

Tra le due, per il momento, ho scelto la prima. Entrambe mi paiono molto avanzate, ma questa scelta si basa soprattutto sulla licenza: Zlib contro Creative Commons.

Per il momento non ho ancora cominciato a programmarci perché ho avuto numerosi problemi perché il mio sistema operativo è case-sensitive, al contrario di Windows, dove è sviluppata principalmente.

Vi spiego come ho fatto a risolverli e a installare irrBullet. … [Leggi il resto]

Bullet e pendii

Se avete avuto a che fare con la libreria per la simulazione della fisica Bullet e dei pendii (colline, rampe), sarete sicuramente impazziti cercando di risolvere il problema per cui il corpo non sta fermo nel pendio.

È capitato anche a me, così dopo ore perse dietro, cambiando appena una parola chiave su google ho trovato la soluzione: come riportato qui, dovete fare così:

World->getDispatchInfo().m_allowedCcdPenetration = 0.0001f;

dove world è il vostro Bullet World.

Se usate Panda3D per ottenerlo dovete fare world->get_world().

Spero sia di aiuto a qualcuno!