Attualmente sto valutando lo Bullet Physics Library per un gioco spaziale 3D che sto scrivendo usando C++ e Ogre3D. Ho ottenuto che Ogre3D e Bullet si integrassero bene derivando da btMotionState e collegando i miei SceneNodes, ma ora sto avendo molti problemi a calcolare quali valori dovrei passare ai metodi btRigidBody :: applyCentralImpulse e btRigidBody :: applyTorqueImpulse per raggiungere i risultati che sto cercando.Fisica di proiettile - Applicare l'impulso di coppia nello spazio locale del corpo
Quando premo i tasti LEFT o RIGHT sulla tastiera, voglio che l'astronave rotoli sull'asse Z locale. Quando premo SU o GIÙ, voglio che passi sull'asse X locale. Quando premo A o Z, desidero accelerare/decelerare nella direzione dell'asse Z locale. Posso ottenere questo risultato perfettamente in Ogre usando un po 'di matematica quaternion e applicando la traduzione/rotazione direttamente sullo SceneNode, ma voglio davvero applicare questi valori nel motore Bullet usando i metodi forza/coppia in modo che continui a muoversi/avanzare/rollare anche dopo che l'utente ha smesso di premere i tasti, e quindi l'attrito agirà sull'oggetto per rallentarlo, se necessario.
Quindi, come faccio a calcolare i valori necessari per fornire a questi due metodi di impulso al fine di garantire che l'impulso agisca in base all'orientamento corrente del corpo anziché utilizzare gli assi del mondo?
Grazie, Marc
Aggiornamento:
sono stato in grado di elaborare gli impulsi necessari per il movimento in avanti e indietro, ma io sto ancora lottando con il modo di riorientare/campo valori di imbardata/roll per poterli utilizzare con il metodo dell'impulso di coppia. Ecco come ho fatto il movimento avanti/indietro:
if (mKeyboard->isKeyDown(OIS::KC_A))
mBody->applyCentralImpulse(mBody->getWorldTransform().getBasis().getColumn(2) * 20 * time);
if (mKeyboard->isKeyDown(OIS::KC_Z))
mBody->applyCentralImpulse(mBody->getWorldTransform().getBasis().getColumn(2) * -20 * time);
Puoi passare il quaternion all'API impulso o in qualche modo convertire il quaternario in qualcosa che puoi passare? – fbrereto
Da quello che vedo nell'API, sembra che il metodo di impulso lineare accetti solo un vettore x, y, z della direzione nelle coordinate del mondo, e il metodo dell'impulso angolare accetta solo un vettore y, p, r per l'imbardata, passo e rotolare in coordinate del mondo. Mentre la matematica può essere leggermente sopra la mia testa (ho difficoltà a visualizzare cose come i prodotti punto e croce), la vera e propria API Bullet è WAY sopra la mia testa e completamente nuova per me ... la combinazione di questi due sta rendendo il mio la vita è impossibile al momento. – Lusid