[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43899] trunk/blender/source/gameengine/ Physics/Bullet/CcdPhysicsController.cpp: BGE bug #21947: Softbodies not using object size.

Benoit Bolsee benoit.bolsee at online.be
Sun Feb 5 10:32:38 CET 2012


Revision: 43899
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43899
Author:   ben2610
Date:     2012-02-05 09:32:35 +0000 (Sun, 05 Feb 2012)
Log Message:
-----------
BGE bug #21947: Softbodies not using object size. Fixed by scaling the shape before creating the soft body.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp

Modified: trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp	2012-02-05 09:29:53 UTC (rev 43898)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp	2012-02-05 09:32:35 UTC (rev 43899)
@@ -231,6 +231,8 @@
 			if (trimeshshape->getMeshInterface()->getNumSubParts()==1)
 			{
 				unsigned char* vertexBase;
+				btScalar* scaledVertexBase;
+				btVector3 localScaling;
 				PHY_ScalarType vertexType;
 				int numverts;
 				int vertexstride;
@@ -238,8 +240,16 @@
 				int indexstride;
 				PHY_ScalarType indexType;
 				trimeshshape->getMeshInterface()->getLockedVertexIndexBase(&vertexBase,numverts,vertexType,vertexstride,&indexbase,indexstride,numtris,indexType);
-				
-				psb = btSoftBodyHelpers::CreateFromTriMesh(worldInfo,(const btScalar*)vertexBase,(const int*)indexbase,numtris,false);
+				localScaling = scaledtrimeshshape->getLocalScaling();
+				scaledVertexBase = new btScalar[numverts*3];
+				for (int i=0; i<numverts*3; i+=3)
+				{
+					scaledVertexBase[i] = ((const btScalar*)vertexBase)[i] * localScaling.getX();
+					scaledVertexBase[i+1] = ((const btScalar*)vertexBase)[i+1] * localScaling.getY();
+					scaledVertexBase[i+2] = ((const btScalar*)vertexBase)[i+2] * localScaling.getZ();
+				}
+				psb = btSoftBodyHelpers::CreateFromTriMesh(worldInfo,scaledVertexBase,(const int*)indexbase,numtris,false);
+				delete [] scaledVertexBase;
 			}
 		} else
 		{




More information about the Bf-blender-cvs mailing list