Obecnie analizuję Bullet Physics Library dla kosmicznej gry 3D, którą piszę używając C++ i Ogre3D. Zauważyłem, że Ogre3D i Bullet zostały wcielone w całość dzięki pochodzeniu z btMotionState i podłączeniu moich SceneNodes, ale teraz mam problem z obliczeniem wartości, które należy przekazać do metod btRigidBody :: applyCentralImpulse i btRigidBody :: applyTorqueImpulse w celu osiągnięcia wyniki, których szukam.Bullet Physics - Apply Torque Impulse w lokalnej przestrzeni ciała
Kiedy naciskam klawisze LEWO lub PRAWO na klawiaturze, chcę, aby statek kosmiczny toczył się na lokalnej osi Z. Kiedy wciskam W GÓRĘ lub W DÓŁ, chcę, aby był ustawiony na lokalnej osi X. Kiedy naciskam A lub Z, chcę, żeby przyspieszył/zwalniał w kierunku lokalnej osi Z. Mogę to osiągnąć doskonale w Ogre, używając matematyki kwaternionowej i stosując translate/rotation bezpośrednio na SceneNode, ale naprawdę chcę zastosować te wartości w silniku Bullet, stosując metody force/torque, aby kontynuować ruch/pitch/roll nawet po tym, jak użytkownik przestaje naciskać klawisze, a więc tarcie działa na obiekt, aby spowolnić go w razie potrzeby.
Jak więc obliczyć wartości niezbędne do zapewnienia tych dwóch metod impulsowych, aby upewnić się, że impuls działa w oparciu o bieżącą orientację ciała, zamiast korzystać z osi świata?
Dzięki, Marc
Aktualizacja:
udało mi się wypracować impulsy potrzebne do przodu i do tyłu ruch, ale ja wciąż zmaga się z jak reorientacji Yaw/łuk/wartości rolki w celu ich użycia z metodą impulsu momentu obrotowego. Oto jak to zrobiłem z przodu/do tyłu ruch:
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);
Czy możesz przekazać kwaternionę do impulsu API lub w jakiś sposób przekonwertować kwaternionę na coś, co możesz przekazać? – fbrereto
Z tego, co widzę w interfejsie API, wynika, że metoda liniowego impulsu akceptuje tylko wektor x, y, z kierunkiem we współrzędnych świata, a metoda impulsu kątowego akceptuje wektor y, p, r dla odchylenia, wysokość i ruch na współrzędnych świata. Podczas gdy matematyka może nieznacznie przekraczać moją głowę (trudno mi sobie wyobrazić rzeczy takie jak produkty dot i cross), sam interfejs Bullet API jest WAY ponad moją głową i zupełnie nowy dla mnie ... połączenie tych dwóch czyni mój życie niemożliwe w tej chwili. – Lusid