remove btContinuousDynamicsWorld, it is obsolete and was never completed.
If you need tunneling prevention, one option is to use the CCD motion clamping in btDiscreteDynamicsWorld. See also Bullet/Demos/CcdPhysicsDemo. You can use an embedded sphere that prevents tunneling, using the following settings: body->setCcdMotionThreshold(0.5); body->setCcdSweptSphereRadius(0.9f); Add a camera zoom setting for the demos, thanks to ejtttje, fixes Issue 543
This commit is contained in:
@@ -74,7 +74,8 @@ m_modifierKeys(0),
|
|||||||
m_scaleBottom(0.5f),
|
m_scaleBottom(0.5f),
|
||||||
m_scaleFactor(2.f),
|
m_scaleFactor(2.f),
|
||||||
m_cameraUp(0,1,0),
|
m_cameraUp(0,1,0),
|
||||||
m_forwardAxis(2),
|
m_forwardAxis(2),
|
||||||
|
m_zoomStepSize(0.4),
|
||||||
m_glutScreenWidth(0),
|
m_glutScreenWidth(0),
|
||||||
m_glutScreenHeight(0),
|
m_glutScreenHeight(0),
|
||||||
m_frustumZNear(1.f),
|
m_frustumZNear(1.f),
|
||||||
@@ -271,14 +272,14 @@ void DemoApplication::stepBack()
|
|||||||
}
|
}
|
||||||
void DemoApplication::zoomIn()
|
void DemoApplication::zoomIn()
|
||||||
{
|
{
|
||||||
m_cameraDistance -= btScalar(0.4); updateCamera();
|
m_cameraDistance -= btScalar(m_zoomStepSize); updateCamera();
|
||||||
if (m_cameraDistance < btScalar(0.1))
|
if (m_cameraDistance < btScalar(0.1))
|
||||||
m_cameraDistance = btScalar(0.1);
|
m_cameraDistance = btScalar(0.1);
|
||||||
|
|
||||||
}
|
}
|
||||||
void DemoApplication::zoomOut()
|
void DemoApplication::zoomOut()
|
||||||
{
|
{
|
||||||
m_cameraDistance += btScalar(0.4); updateCamera();
|
m_cameraDistance += btScalar(m_zoomStepSize); updateCamera();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ protected:
|
|||||||
float m_scaleFactor;
|
float m_scaleFactor;
|
||||||
btVector3 m_cameraUp;
|
btVector3 m_cameraUp;
|
||||||
int m_forwardAxis;
|
int m_forwardAxis;
|
||||||
|
float m_zoomStepSize;
|
||||||
|
|
||||||
int m_glutScreenWidth;
|
int m_glutScreenWidth;
|
||||||
int m_glutScreenHeight;
|
int m_glutScreenHeight;
|
||||||
|
|||||||
@@ -291,8 +291,8 @@ public:
|
|||||||
if (softBodyData->m_pose)
|
if (softBodyData->m_pose)
|
||||||
{
|
{
|
||||||
psb->m_pose.m_aqq.deSerializeFloat( softBodyData->m_pose->m_aqq);
|
psb->m_pose.m_aqq.deSerializeFloat( softBodyData->m_pose->m_aqq);
|
||||||
psb->m_pose.m_bframe = softBodyData->m_pose->m_bframe;
|
psb->m_pose.m_bframe = (softBodyData->m_pose->m_bframe!=0);
|
||||||
psb->m_pose.m_bvolume = softBodyData->m_pose->m_bvolume;
|
psb->m_pose.m_bvolume = (softBodyData->m_pose->m_bvolume!=0);
|
||||||
psb->m_pose.m_com.deSerializeFloat(softBodyData->m_pose->m_com);
|
psb->m_pose.m_com.deSerializeFloat(softBodyData->m_pose->m_com);
|
||||||
|
|
||||||
psb->m_pose.m_pos.resize(softBodyData->m_pose->m_numPositions);
|
psb->m_pose.m_pos.resize(softBodyData->m_pose->m_numPositions);
|
||||||
@@ -349,9 +349,9 @@ public:
|
|||||||
psb->m_clusters[i]->m_adamping = softBodyData->m_clusters[i].m_adamping;
|
psb->m_clusters[i]->m_adamping = softBodyData->m_clusters[i].m_adamping;
|
||||||
psb->m_clusters[i]->m_av.deSerializeFloat(softBodyData->m_clusters[i].m_av);
|
psb->m_clusters[i]->m_av.deSerializeFloat(softBodyData->m_clusters[i].m_av);
|
||||||
psb->m_clusters[i]->m_clusterIndex = softBodyData->m_clusters[i].m_clusterIndex;
|
psb->m_clusters[i]->m_clusterIndex = softBodyData->m_clusters[i].m_clusterIndex;
|
||||||
psb->m_clusters[i]->m_collide = softBodyData->m_clusters[i].m_collide;
|
psb->m_clusters[i]->m_collide = (softBodyData->m_clusters[i].m_collide!=0);
|
||||||
psb->m_clusters[i]->m_com.deSerializeFloat(softBodyData->m_clusters[i].m_com);
|
psb->m_clusters[i]->m_com.deSerializeFloat(softBodyData->m_clusters[i].m_com);
|
||||||
psb->m_clusters[i]->m_containsAnchor = softBodyData->m_clusters[i].m_containsAnchor;
|
psb->m_clusters[i]->m_containsAnchor = (softBodyData->m_clusters[i].m_containsAnchor!=0);
|
||||||
psb->m_clusters[i]->m_dimpulses[0].deSerializeFloat(softBodyData->m_clusters[i].m_dimpulses[0]);
|
psb->m_clusters[i]->m_dimpulses[0].deSerializeFloat(softBodyData->m_clusters[i].m_dimpulses[0]);
|
||||||
psb->m_clusters[i]->m_dimpulses[1].deSerializeFloat(softBodyData->m_clusters[i].m_dimpulses[1]);
|
psb->m_clusters[i]->m_dimpulses[1].deSerializeFloat(softBodyData->m_clusters[i].m_dimpulses[1]);
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ SET(BulletDynamics_SRCS
|
|||||||
ConstraintSolver/btSolve2LinearConstraint.cpp
|
ConstraintSolver/btSolve2LinearConstraint.cpp
|
||||||
ConstraintSolver/btTypedConstraint.cpp
|
ConstraintSolver/btTypedConstraint.cpp
|
||||||
ConstraintSolver/btUniversalConstraint.cpp
|
ConstraintSolver/btUniversalConstraint.cpp
|
||||||
Dynamics/btContinuousDynamicsWorld.cpp
|
|
||||||
Dynamics/btDiscreteDynamicsWorld.cpp
|
Dynamics/btDiscreteDynamicsWorld.cpp
|
||||||
Dynamics/btRigidBody.cpp
|
Dynamics/btRigidBody.cpp
|
||||||
Dynamics/btSimpleDynamicsWorld.cpp
|
Dynamics/btSimpleDynamicsWorld.cpp
|
||||||
@@ -50,7 +49,6 @@ SET(ConstraintSolver_HDRS
|
|||||||
)
|
)
|
||||||
SET(Dynamics_HDRS
|
SET(Dynamics_HDRS
|
||||||
Dynamics/btActionInterface.h
|
Dynamics/btActionInterface.h
|
||||||
Dynamics/btContinuousDynamicsWorld.h
|
|
||||||
Dynamics/btDiscreteDynamicsWorld.h
|
Dynamics/btDiscreteDynamicsWorld.h
|
||||||
Dynamics/btDynamicsWorld.h
|
Dynamics/btDynamicsWorld.h
|
||||||
Dynamics/btSimpleDynamicsWorld.h
|
Dynamics/btSimpleDynamicsWorld.h
|
||||||
|
|||||||
@@ -1,196 +0,0 @@
|
|||||||
/*
|
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
|
||||||
Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
|
||||||
subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "btContinuousDynamicsWorld.h"
|
|
||||||
#include "LinearMath/btQuickprof.h"
|
|
||||||
|
|
||||||
//collision detection
|
|
||||||
#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
|
|
||||||
#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h"
|
|
||||||
#include "BulletCollision/CollisionShapes/btCollisionShape.h"
|
|
||||||
#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
|
|
||||||
|
|
||||||
//rigidbody & constraints
|
|
||||||
#include "BulletDynamics/Dynamics/btRigidBody.h"
|
|
||||||
#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
|
|
||||||
#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
|
|
||||||
#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
btContinuousDynamicsWorld::btContinuousDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration)
|
|
||||||
:btDiscreteDynamicsWorld(dispatcher,pairCache,constraintSolver,collisionConfiguration)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
btContinuousDynamicsWorld::~btContinuousDynamicsWorld()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void btContinuousDynamicsWorld::internalSingleStepSimulation( btScalar timeStep)
|
|
||||||
{
|
|
||||||
|
|
||||||
startProfiling(timeStep);
|
|
||||||
|
|
||||||
if(0 != m_internalPreTickCallback) {
|
|
||||||
(*m_internalPreTickCallback)(this, timeStep);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///update aabbs information
|
|
||||||
updateAabbs();
|
|
||||||
//static int frame=0;
|
|
||||||
// printf("frame %d\n",frame++);
|
|
||||||
|
|
||||||
///apply gravity, predict motion
|
|
||||||
predictUnconstraintMotion(timeStep);
|
|
||||||
|
|
||||||
btDispatcherInfo& dispatchInfo = getDispatchInfo();
|
|
||||||
|
|
||||||
dispatchInfo.m_timeStep = timeStep;
|
|
||||||
dispatchInfo.m_stepCount = 0;
|
|
||||||
dispatchInfo.m_debugDraw = getDebugDrawer();
|
|
||||||
|
|
||||||
///perform collision detection
|
|
||||||
performDiscreteCollisionDetection();
|
|
||||||
|
|
||||||
calculateSimulationIslands();
|
|
||||||
|
|
||||||
|
|
||||||
getSolverInfo().m_timeStep = timeStep;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///solve contact and other joint constraints
|
|
||||||
solveConstraints(getSolverInfo());
|
|
||||||
|
|
||||||
///CallbackTriggers();
|
|
||||||
calculateTimeOfImpacts(timeStep);
|
|
||||||
|
|
||||||
btScalar toi = dispatchInfo.m_timeOfImpact;
|
|
||||||
// if (toi < 1.f)
|
|
||||||
// printf("toi = %f\n",toi);
|
|
||||||
if (toi < 0.f)
|
|
||||||
printf("toi = %f\n",toi);
|
|
||||||
|
|
||||||
|
|
||||||
///integrate transforms
|
|
||||||
integrateTransforms(timeStep * toi);
|
|
||||||
|
|
||||||
///update vehicle simulation
|
|
||||||
updateActions(timeStep);
|
|
||||||
|
|
||||||
updateActivationState( timeStep );
|
|
||||||
|
|
||||||
if(0 != m_internalTickCallback) {
|
|
||||||
(*m_internalTickCallback)(this, timeStep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void btContinuousDynamicsWorld::calculateTimeOfImpacts(btScalar timeStep)
|
|
||||||
{
|
|
||||||
///these should be 'temporal' aabbs!
|
|
||||||
updateTemporalAabbs(timeStep);
|
|
||||||
|
|
||||||
///'toi' is the global smallest time of impact. However, we just calculate the time of impact for each object individually.
|
|
||||||
///so we handle the case moving versus static properly, and we cheat for moving versus moving
|
|
||||||
btScalar toi = 1.f;
|
|
||||||
|
|
||||||
|
|
||||||
btDispatcherInfo& dispatchInfo = getDispatchInfo();
|
|
||||||
dispatchInfo.m_timeStep = timeStep;
|
|
||||||
dispatchInfo.m_timeOfImpact = 1.f;
|
|
||||||
dispatchInfo.m_stepCount = 0;
|
|
||||||
dispatchInfo.m_dispatchFunc = btDispatcherInfo::DISPATCH_CONTINUOUS;
|
|
||||||
|
|
||||||
///calculate time of impact for overlapping pairs
|
|
||||||
|
|
||||||
|
|
||||||
btDispatcher* dispatcher = getDispatcher();
|
|
||||||
if (dispatcher)
|
|
||||||
dispatcher->dispatchAllCollisionPairs(m_broadphasePairCache->getOverlappingPairCache(),dispatchInfo,m_dispatcher1);
|
|
||||||
|
|
||||||
toi = dispatchInfo.m_timeOfImpact;
|
|
||||||
|
|
||||||
dispatchInfo.m_dispatchFunc = btDispatcherInfo::DISPATCH_DISCRETE;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void btContinuousDynamicsWorld::updateTemporalAabbs(btScalar timeStep)
|
|
||||||
{
|
|
||||||
|
|
||||||
btVector3 temporalAabbMin,temporalAabbMax;
|
|
||||||
|
|
||||||
for ( int i=0;i<m_collisionObjects.size();i++)
|
|
||||||
{
|
|
||||||
btCollisionObject* colObj = m_collisionObjects[i];
|
|
||||||
|
|
||||||
btRigidBody* body = btRigidBody::upcast(colObj);
|
|
||||||
if (body)
|
|
||||||
{
|
|
||||||
body->getCollisionShape()->getAabb(m_collisionObjects[i]->getWorldTransform(),temporalAabbMin,temporalAabbMax);
|
|
||||||
const btVector3& linvel = body->getLinearVelocity();
|
|
||||||
|
|
||||||
//make the AABB temporal
|
|
||||||
btScalar temporalAabbMaxx = temporalAabbMax.getX();
|
|
||||||
btScalar temporalAabbMaxy = temporalAabbMax.getY();
|
|
||||||
btScalar temporalAabbMaxz = temporalAabbMax.getZ();
|
|
||||||
btScalar temporalAabbMinx = temporalAabbMin.getX();
|
|
||||||
btScalar temporalAabbMiny = temporalAabbMin.getY();
|
|
||||||
btScalar temporalAabbMinz = temporalAabbMin.getZ();
|
|
||||||
|
|
||||||
// add linear motion
|
|
||||||
btVector3 linMotion = linvel*timeStep;
|
|
||||||
|
|
||||||
if (linMotion.x() > 0.f)
|
|
||||||
temporalAabbMaxx += linMotion.x();
|
|
||||||
else
|
|
||||||
temporalAabbMinx += linMotion.x();
|
|
||||||
if (linMotion.y() > 0.f)
|
|
||||||
temporalAabbMaxy += linMotion.y();
|
|
||||||
else
|
|
||||||
temporalAabbMiny += linMotion.y();
|
|
||||||
if (linMotion.z() > 0.f)
|
|
||||||
temporalAabbMaxz += linMotion.z();
|
|
||||||
else
|
|
||||||
temporalAabbMinz += linMotion.z();
|
|
||||||
|
|
||||||
//add conservative angular motion
|
|
||||||
btScalar angularMotion(0);// = angvel.length() * GetAngularMotionDisc() * timeStep;
|
|
||||||
btVector3 angularMotion3d(angularMotion,angularMotion,angularMotion);
|
|
||||||
temporalAabbMin = btVector3(temporalAabbMinx,temporalAabbMiny,temporalAabbMinz);
|
|
||||||
temporalAabbMax = btVector3(temporalAabbMaxx,temporalAabbMaxy,temporalAabbMaxz);
|
|
||||||
|
|
||||||
temporalAabbMin -= angularMotion3d;
|
|
||||||
temporalAabbMax += angularMotion3d;
|
|
||||||
|
|
||||||
m_broadphasePairCache->setAabb(body->getBroadphaseHandle(),temporalAabbMin,temporalAabbMax,m_dispatcher1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//update aabb (of all moved objects)
|
|
||||||
|
|
||||||
m_broadphasePairCache->calculateOverlappingPairs(m_dispatcher1);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
|
||||||
Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
|
||||||
subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef BT_CONTINUOUS_DYNAMICS_WORLD_H
|
|
||||||
#define BT_CONTINUOUS_DYNAMICS_WORLD_H
|
|
||||||
|
|
||||||
#include "btDiscreteDynamicsWorld.h"
|
|
||||||
|
|
||||||
///btContinuousDynamicsWorld adds optional (per object) continuous collision detection for fast moving objects to the btDiscreteDynamicsWorld.
|
|
||||||
///This copes with fast moving objects that otherwise would tunnel/miss collisions.
|
|
||||||
///Under construction, don't use yet! Please use btDiscreteDynamicsWorld instead.
|
|
||||||
class btContinuousDynamicsWorld : public btDiscreteDynamicsWorld
|
|
||||||
{
|
|
||||||
|
|
||||||
void updateTemporalAabbs(btScalar timeStep);
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
btContinuousDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration);
|
|
||||||
virtual ~btContinuousDynamicsWorld();
|
|
||||||
|
|
||||||
///time stepping with calculation of time of impact for selected fast moving objects
|
|
||||||
virtual void internalSingleStepSimulation( btScalar timeStep);
|
|
||||||
|
|
||||||
virtual void calculateTimeOfImpacts(btScalar timeStep);
|
|
||||||
|
|
||||||
virtual btDynamicsWorldType getWorldType() const
|
|
||||||
{
|
|
||||||
return BT_CONTINUOUS_DYNAMICS_WORLD;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //BT_CONTINUOUS_DYNAMICS_WORLD_H
|
|
||||||
@@ -23,7 +23,7 @@ class btOverlappingPairCache;
|
|||||||
class btConstraintSolver;
|
class btConstraintSolver;
|
||||||
|
|
||||||
///The btSimpleDynamicsWorld serves as unit-test and to verify more complicated and optimized dynamics worlds.
|
///The btSimpleDynamicsWorld serves as unit-test and to verify more complicated and optimized dynamics worlds.
|
||||||
///Please use btDiscreteDynamicsWorld instead (or btContinuousDynamicsWorld once it is finished).
|
///Please use btDiscreteDynamicsWorld instead
|
||||||
class btSimpleDynamicsWorld : public btDynamicsWorld
|
class btSimpleDynamicsWorld : public btDynamicsWorld
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -305,7 +305,6 @@ libBulletCollision_la_SOURCES = \
|
|||||||
BulletCollision/Gimpact/gim_tri_collision.cpp
|
BulletCollision/Gimpact/gim_tri_collision.cpp
|
||||||
|
|
||||||
libBulletDynamics_la_SOURCES = \
|
libBulletDynamics_la_SOURCES = \
|
||||||
BulletDynamics/Dynamics/btContinuousDynamicsWorld.cpp \
|
|
||||||
BulletDynamics/Dynamics/btRigidBody.cpp \
|
BulletDynamics/Dynamics/btRigidBody.cpp \
|
||||||
BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp \
|
BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp \
|
||||||
BulletDynamics/Dynamics/Bullet-C-API.cpp \
|
BulletDynamics/Dynamics/Bullet-C-API.cpp \
|
||||||
@@ -328,7 +327,6 @@ libBulletDynamics_la_SOURCES = \
|
|||||||
BulletDynamics/Character/btKinematicCharacterController.h \
|
BulletDynamics/Character/btKinematicCharacterController.h \
|
||||||
BulletDynamics/Character/btCharacterControllerInterface.h \
|
BulletDynamics/Character/btCharacterControllerInterface.h \
|
||||||
BulletDynamics/Dynamics/btActionInterface.h \
|
BulletDynamics/Dynamics/btActionInterface.h \
|
||||||
BulletDynamics/Dynamics/btContinuousDynamicsWorld.h \
|
|
||||||
BulletDynamics/Dynamics/btSimpleDynamicsWorld.h \
|
BulletDynamics/Dynamics/btSimpleDynamicsWorld.h \
|
||||||
BulletDynamics/Dynamics/btRigidBody.h \
|
BulletDynamics/Dynamics/btRigidBody.h \
|
||||||
BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h \
|
BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h \
|
||||||
@@ -389,7 +387,6 @@ nobase_bullet_include_HEADERS += \
|
|||||||
BulletDynamics/Vehicle/btWheelInfo.h \
|
BulletDynamics/Vehicle/btWheelInfo.h \
|
||||||
BulletDynamics/Vehicle/btVehicleRaycaster.h \
|
BulletDynamics/Vehicle/btVehicleRaycaster.h \
|
||||||
BulletDynamics/Dynamics/btActionInterface.h \
|
BulletDynamics/Dynamics/btActionInterface.h \
|
||||||
BulletDynamics/Dynamics/btContinuousDynamicsWorld.h \
|
|
||||||
BulletDynamics/Dynamics/btRigidBody.h \
|
BulletDynamics/Dynamics/btRigidBody.h \
|
||||||
BulletDynamics/Dynamics/btDynamicsWorld.h \
|
BulletDynamics/Dynamics/btDynamicsWorld.h \
|
||||||
BulletDynamics/Dynamics/btSimpleDynamicsWorld.h \
|
BulletDynamics/Dynamics/btSimpleDynamicsWorld.h \
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ subject to the following restrictions:
|
|||||||
#include "btBulletCollisionCommon.h"
|
#include "btBulletCollisionCommon.h"
|
||||||
|
|
||||||
#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
|
#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
|
||||||
#include "BulletDynamics/Dynamics/btContinuousDynamicsWorld.h"
|
|
||||||
|
|
||||||
#include "BulletDynamics/Dynamics/btSimpleDynamicsWorld.h"
|
#include "BulletDynamics/Dynamics/btSimpleDynamicsWorld.h"
|
||||||
#include "BulletDynamics/Dynamics/btRigidBody.h"
|
#include "BulletDynamics/Dynamics/btRigidBody.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user