converted to Jolt physics

This commit is contained in:
2025-11-23 02:00:31 +03:00
parent 3f0484e87c
commit cd82fb0eed
52 changed files with 4302 additions and 1458 deletions

View File

@@ -7,9 +7,6 @@
#include "Ogre.h"
#include "OgreApplicationContext.h"
#include "Bullet/OgreBullet.h"
#include "BulletCollision/CollisionDispatch/btGhostObject.h"
#include "LinearMath/btTransform.h"
#include "OgrePageManager.h"
#define CAM_HEIGHT 1.6f // height of camera above character's center of mass
@@ -21,11 +18,15 @@ using Real = Ogre::Real;
using Math = Ogre::Math;
class WorldData {
#if 0
std::unique_ptr<Ogre::Bullet::DynamicsWorld> mDynWorld;
std::unique_ptr<Ogre::Bullet::DebugDrawer> mDbgDraw;
#endif
std::unique_ptr<Ogre::Root> mRoot;
std::unique_ptr<Ogre::SceneManager> mScnMgr;
#if 0
std::unique_ptr<btDynamicsWorld> mbtWorld;
#endif
std::unique_ptr<Ogre::PageManager> mPageManager;
Ogre::PagedWorld *mPagedWorld;
@@ -61,13 +62,14 @@ private:
DummyPageProvider mDummyPageProvider;
WorldData(Ogre::Root *root, Ogre::SceneManager *scnMgr)
: mDynWorld(new Ogre::Bullet::DynamicsWorld(
: /*mDynWorld(new Ogre::Bullet::DynamicsWorld(
Ogre::Vector3(0, -9.8, 0)))
, mDbgDraw(new Ogre::Bullet::DebugDrawer(
scnMgr->getRootSceneNode(), mDynWorld->getBtWorld()))
, mRoot(root)
, */
mRoot(root)
, mScnMgr(scnMgr)
, mbtWorld(mDynWorld->getBtWorld())
/*, mbtWorld(mDynWorld->getBtWorld()) */
, mPageManager(nullptr)
, mPagedWorld(nullptr)
{
@@ -122,6 +124,7 @@ public:
#endif
return ghost;
}
#if 0
btRigidBody *addRigidBody(float mass, Ogre::Entity *ent,
Ogre::Bullet::ColliderType ct, int group = 1,
int mask = 0xFFFF)
@@ -182,11 +185,14 @@ public:
{
return mDynWorld.get();
}
#endif
void update(float delta)
{
#if 0
WorldData::get_singleton()->getBtWorld()->stepSimulation(delta,
10);
mDbgDraw->update();
#endif
}
void initPagedWorld(Ogre::Camera *camera)
{
@@ -200,7 +206,7 @@ public:
WorldData *WorldData::singleton = nullptr;
class MainWorld : public Ogre::FrameListener {
btRigidBody *mFloorBody;
// btRigidBody *mFloorBody;
public:
void setup()
@@ -219,14 +225,18 @@ public:
WorldData::get_singleton()->getSceneManager();
Ogre::Entity *floor = scnMgr->createEntity("Floor", "floor");
scnMgr->getRootSceneNode()->attachObject(floor);
#if 0
mFloorBody = WorldData::get_singleton()->addRigidBody(
0, floor, Ogre::Bullet::CT_TRIMESH);
#endif
}
#if 0
btRigidBody *addCharacter(Ogre::Entity *ent, float mass)
{
return WorldData::get_singleton()->addKinematicRigidBody(
mass, ent, Ogre::Bullet::CT_COMPOUND);
}
#endif
bool frameStarted(const Ogre::FrameEvent &evt) override;
};
class CharacterController : public OgreBites::InputListener,
@@ -265,8 +275,10 @@ class CharacterController : public OgreBites::InputListener,
Ogre::Vector3 rootMotion;
Ogre::Quaternion rootRotation;
// btRigidBody *mRigidBody;
#if 0
btCompoundShape *mCollisionShape;
btPairCachingGhostObject *mGhostObject;
#endif
public:
CharacterController(Ogre::SceneNode *camNode, Ogre::Camera *cam,
@@ -315,6 +327,7 @@ private:
recoverResult *recover_result,
const std::set<btCollisionObject *> &exclude);
#endif
#if 0
inline btQuaternion convert(const Ogre::Quaternion &q)
{
return btQuaternion(q.x, q.y, q.z, q.w);
@@ -344,6 +357,7 @@ private:
q = convert(from.getRotation());
v = convert(from.getOrigin());
}
#endif
};
CharacterController::CharacterController(Ogre::SceneNode *camNode,
Ogre::Camera *cam,