diff options
author | Erwin Coumans <blender@erwincoumans.com> | 2011-04-20 08:55:58 +0400 |
---|---|---|
committer | Erwin Coumans <blender@erwincoumans.com> | 2011-04-20 08:55:58 +0400 |
commit | b5a2d7f15e2ae60d51c049e56346d058d7c5cb0f (patch) | |
tree | 39f879fcaf8b4bd68e275c3c1d9fa52d70408425 /source/gameengine | |
parent | 37fcffd0ac190dffb03c899d5c9868ac3cfbc52d (diff) |
Bugfix for #26795 and #26917, Fix a bug that cause the radar sensor to break
Never memset(&ob, 0,sizeof(class)) when there is a constructor, it overrides all memory.
The problem was that the memset(0) was setting the scaling to (0,0,0), the height of the cone became 'infinity'
so GJK would iterate 'MAX_ITER' without converging due to this #NAN value
Diffstat (limited to 'source/gameengine')
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsController.h | 34 | ||||
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp | 6 |
2 files changed, 38 insertions, 2 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h index 00ecc64c41e..97dc65c5850 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h @@ -252,8 +252,40 @@ struct CcdConstructionInfo m_inertiaFactor(1.f), m_do_anisotropic(false), m_anisotropicFriction(1.f,1.f,1.f), - m_contactProcessingThreshold(1e10) + m_contactProcessingThreshold(1e10f), + m_soft_linStiff(1.f), + m_soft_angStiff(1.f), + m_soft_volume(1.f), + m_soft_viterations(0), + m_soft_piterations(1), + m_soft_diterations(0), + m_soft_citerations(4), + m_do_fh(false), + m_do_rot_fh(false), + m_fh_spring(0.f), + m_fh_damping(0.f), + m_fh_distance(1.f), + m_fh_normal(false), + m_soft_kVCF(1.f), + m_soft_kDG(0.f), + m_soft_kLF(0.f), + m_soft_kDP(0.f), + m_soft_kPR(0.f), + m_soft_kVC(0.f), + m_soft_kDF(0.2f), + m_soft_kMT(0), + m_soft_kCHR(1.0f), + m_soft_kKHR(0.1f), + m_soft_kSHR(1.0f), + m_soft_kAHR(0.7f), + m_soft_kSRHR_CL(0.1f), + m_soft_kSKHR_CL(1.f), + m_soft_kSSHR_CL(0.5f), + m_soft_kSR_SPLT_CL(0.5f), + m_soft_kSK_SPLT_CL(0.5f), + m_soft_kSS_SPLT_CL(0.5f) { + } btVector3 m_localInertiaTensor; diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp index c87157ee993..416cef71067 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp @@ -592,6 +592,9 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep,float float subStep = timeStep / float(m_numTimeSubSteps); i = m_dynamicsWorld->stepSimulation(interval,25,subStep);//perform always a full simulation step +//uncomment next line to see where Bullet spend its time (printf in console) +//CProfileManager::dumpAll(); + processFhSprings(curTime,i*subStep); for (it=m_controllers.begin(); it!=m_controllers.end(); it++) @@ -2759,7 +2762,8 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl PHY_IPhysicsController* CcdPhysicsEnvironment::CreateConeController(float coneradius,float coneheight) { CcdConstructionInfo cinfo; - memset(&cinfo, 0, sizeof(cinfo)); /* avoid uninitialized values */ +//don't memset cinfo: this is C++ and values should be set in the constructor! + // we don't need a CcdShapeConstructionInfo for this shape: // it is simple enough for the standard copy constructor (see CcdPhysicsController::GetReplica) cinfo.m_collisionShape = new btConeShape(coneradius,coneheight); |