Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2009-03-29 23:54:05 +0400
committerErwin Coumans <blender@erwincoumans.com>2009-03-29 23:54:05 +0400
commitb182778e7155abe09bd2101b851fb1178c9babb8 (patch)
tree79c20d43506d05d8a46d1290d00d589e3fe9f669
parent30fa7a7286a2d4b5f8abedc2ce43602fb229b25c (diff)
Applied patch #18446, to do versions on damping
Re-enable vertex welding, only for soft bodies. They require it. Future versions could expose such vertexWeldingThreshold.
-rw-r--r--source/blender/blenkernel/BKE_blender.h2
-rw-r--r--source/blender/blenloader/intern/readfile.c10
-rw-r--r--source/blender/src/buttons_logic.c50
-rw-r--r--source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp5
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp33
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h12
6 files changed, 70 insertions, 42 deletions
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index a6334e665d1..db6d4762b17 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -41,7 +41,7 @@ struct ListBase;
struct MemFile;
#define BLENDER_VERSION 248
-#define BLENDER_SUBVERSION 2
+#define BLENDER_SUBVERSION 3
#define BLENDER_MINVERSION 245
#define BLENDER_MINSUBVERSION 15
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 2c6a2f2bb3a..c2eaae011c8 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8024,6 +8024,16 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
sce->toolsettings->skgen_retarget_roll = SK_RETARGET_ROLL_VIEW;
}
}
+
+ if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) {
+ Object *ob;
+
+ /* Adjustments needed after Bullets update */
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ ob->damping *= 0.635f;
+ ob->rdamping = 0.1 + (0.59f * ob->rdamping);
+ }
+ }
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c
index 01520061a19..cf6d29da0d3 100644
--- a/source/blender/src/buttons_logic.c
+++ b/source/blender/src/buttons_logic.c
@@ -3122,30 +3122,32 @@ static uiBlock *advanced_bullet_menu(void *arg_ob)
"Collision margin");
yco -= 20;
- uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_X_AXIS, 0, "Lock X Axis",
- xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
- "Disable simulation of linear motion along the X axis");
- uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_X_ROT_AXIS, 0, "Lock X Rot Xxis",
- xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
- "Disable simulation of angular motion along the X axis");
- yco -= 20;
- xco=0;
- uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Y_AXIS, 0, "Lock Y Axis",
- xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
- "Disable simulation of linear motion along the Y axis");
- uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Y_ROT_AXIS, 0, "Lock Y Rot Axis",
- xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
- "Disable simulation of angular motion along the Y axis");
-
- yco -= 20;
- xco=0;
- uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Z_AXIS, 0, "Lock Z Axis",
- xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
- "Disable simulation of linear motion along the Z axis");
- uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Z_ROT_AXIS, 0, "Lock Z Rot Axis",
- xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
- "Disable simulation of angular motion along the Z axis");
-
+ if (ob->gameflag & OB_RIGID_BODY)
+ {
+ uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_X_AXIS, 0, "Lock X Axis",
+ xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
+ "Disable simulation of linear motion along the X axis");
+ uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_X_ROT_AXIS, 0, "Lock X Rot Xxis",
+ xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
+ "Disable simulation of angular motion along the X axis");
+ yco -= 20;
+ xco=0;
+ uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Y_AXIS, 0, "Lock Y Axis",
+ xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
+ "Disable simulation of linear motion along the Y axis");
+ uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Y_ROT_AXIS, 0, "Lock Y Rot Axis",
+ xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
+ "Disable simulation of angular motion along the Y axis");
+
+ yco -= 20;
+ xco=0;
+ uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Z_AXIS, 0, "Lock Z Axis",
+ xco, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
+ "Disable simulation of linear motion along the Z axis");
+ uiDefButBitI(block, TOG, OB_LOCK_RIGID_BODY_Z_ROT_AXIS, 0, "Lock Z Rot Axis",
+ xco+=180, yco, 180, 19, &ob->gameflag2, 0, 0, 0, 0,
+ "Disable simulation of angular motion along the Z axis");
+ }
/*
uiDefButBitI(block, TOG, OB_BSB_COL_CL_RS, 0, "Cluster Collision RS",
xco, yco, 180, 19, &ob->bsoft->collisionflags, 0, 0, 0, 0,
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
index 8002da6b8d4..03149859f4d 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
@@ -882,10 +882,9 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
shapeInfo->SetMesh(meshobj, false,false);
}
- // Note! since 2.48a bullet mesh conversion has been sped up not to remove doubles
- // if softbody needs this there should be some post processing filter for softbody meshes.
+ // Soft bodies require welding. Only avoid remove doubles for non-soft bodies!
if (objprop->m_softbody)
- shapeInfo->setVertexWeldingThreshold(0.01f); //todo: expose this to the UI
+ shapeInfo->setVertexWeldingThreshold1(0.01f); //todo: expose this to the UI
bm = shapeInfo->CreateBulletShape();
//no moving concave meshes, so don't bother calculating inertia
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index 35602b4095a..cc6be9a7ae3 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -1569,14 +1569,31 @@ btCollisionShape* CcdShapeConstructionInfo::CreateBulletShape()
if (!m_unscaledShape)
{
- btTriangleIndexVertexArray* indexVertexArrays = new btTriangleIndexVertexArray(
- m_polygonIndexArray.size(),
- &m_triFaceArray[0],
- 3*sizeof(int),
- m_vertexArray.size(),
- (btScalar*) &m_vertexArray[0].x(),
- sizeof(btVector3)
- );
+ btTriangleIndexVertexArray* indexVertexArrays = 0;
+
+ ///enable welding, only for the objects that need it (such as soft bodies)
+ if (0.f != m_weldingThreshold1)
+ {
+ btTriangleMesh* collisionMeshData = new btTriangleMesh(true,false);
+ collisionMeshData->m_weldingThreshold = m_weldingThreshold1;
+ bool removeDuplicateVertices=true;
+ // m_vertexArray is necessarily a multiple of 3
+ for (int i=0;i<m_vertexArray.size(); i+=3 )
+ {
+ collisionMeshData->addTriangle(m_vertexArray[i+2],m_vertexArray[i+1],m_vertexArray[i],removeDuplicateVertices);
+ }
+ indexVertexArrays = collisionMeshData;
+
+ } else
+ {
+ indexVertexArrays = new btTriangleIndexVertexArray(
+ m_polygonIndexArray.size(),
+ &m_triFaceArray[0],
+ 3*sizeof(int),
+ m_vertexArray.size(),
+ (btScalar*) &m_vertexArray[0].x(),
+ sizeof(btVector3));
+ }
// this shape will be shared and not deleted until shapeInfo is deleted
m_unscaledShape = new btBvhTriangleMeshShape( indexVertexArrays, true );
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index 67dd82db5cc..510454a7b63 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -72,7 +72,7 @@ public:
m_meshObject(NULL),
m_unscaledShape(NULL),
m_useGimpact(false),
- m_weldingThreshold(0.f),
+ m_weldingThreshold1(0.f),
m_shapeProxy(NULL)
{
m_childTrans.setIdentity();
@@ -171,13 +171,13 @@ public:
std::vector<int> m_triFaceArray; // Contains an array of triplets of face indicies
// quads turn into 2 tris
- void setVertexWeldingThreshold(float threshold)
+ void setVertexWeldingThreshold1(float threshold)
{
- m_weldingThreshold = threshold;
+ m_weldingThreshold1 = threshold;
}
- float getVertexWeldingThreshold() const
+ float getVertexWeldingThreshold1() const
{
- return m_weldingThreshold;
+ return m_weldingThreshold1;
}
protected:
static std::map<RAS_MeshObject*, CcdShapeConstructionInfo*> m_meshShapeMap;
@@ -188,7 +188,7 @@ protected:
// the actual shape is of type btScaledBvhTriangleMeshShape
std::vector<CcdShapeConstructionInfo*> m_shapeArray; // for compound shapes
bool m_useGimpact; //use gimpact for concave dynamic/moving collision detection
- float m_weldingThreshold; //welding closeby vertices together can improve softbody stability etc. // Not used at the moment, maybe remove?
+ float m_weldingThreshold1; //welding closeby vertices together can improve softbody stability etc.
CcdShapeConstructionInfo* m_shapeProxy; // only used for PHY_SHAPE_PROXY, pointer to actual shape info
};