[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15661] branches/blender-2.47/source: branches/blender-2.47

Diego Borghetti bdiego at gmail.com
Sun Jul 20 23:51:00 CEST 2008


Revision: 15661
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15661
Author:   bdiego
Date:     2008-07-20 23:51:00 +0200 (Sun, 20 Jul 2008)

Log Message:
-----------
branches/blender-2.47

Merge from trunk:
	Revision: 15640
	Revision: 15651
	Revision: 15652
	Revision: 15653
	Revision: 15658

Modified Paths:
--------------
    branches/blender-2.47/source/blender/blenkernel/intern/lattice.c
    branches/blender-2.47/source/blender/blenkernel/intern/particle_system.c
    branches/blender-2.47/source/blender/render/intern/source/shadeoutput.c
    branches/blender-2.47/source/blender/src/drawobject.c
    branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
    branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.h
    branches/blender-2.47/source/gameengine/Ketsji/KX_GameObject.cpp
    branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsController.h
    branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
    branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h

Modified: branches/blender-2.47/source/blender/blenkernel/intern/lattice.c
===================================================================
--- branches/blender-2.47/source/blender/blenkernel/intern/lattice.c	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/blender/blenkernel/intern/lattice.c	2008-07-20 21:51:00 UTC (rev 15661)
@@ -915,7 +915,10 @@
 		mti->deformVerts(md, ob, NULL, vertexCos, numVerts);
 	}
 
-	if (vertexCos) {
+	/* always displist to make this work like derivedmesh */
+	if (!vertexCos) vertexCos = lattice_getVertexCos(ob, &numVerts);
+	
+	{
 		DispList *dl = MEM_callocN(sizeof(*dl), "lt_dl");
 		dl->type = DL_VERTS;
 		dl->parts = 1;

Modified: branches/blender-2.47/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- branches/blender-2.47/source/blender/blenkernel/intern/particle_system.c	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/blender/blenkernel/intern/particle_system.c	2008-07-20 21:51:00 UTC (rev 15661)
@@ -2797,7 +2797,10 @@
 				epart= epsys->part;
 				pd= epart->pd;
 				totepart= epsys->totpart;
-
+				
+				if(totepart <= 0)
+					continue;
+				
 				if(pd->forcefield==PFIELD_HARMONIC){
 					/* every particle is mapped to only one harmonic effector particle */
 					p= pa_no%epsys->totpart;

Modified: branches/blender-2.47/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/blender-2.47/source/blender/render/intern/source/shadeoutput.c	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/blender/render/intern/source/shadeoutput.c	2008-07-20 21:51:00 UTC (rev 15661)
@@ -1379,6 +1379,8 @@
 		}
 		
 		/* specularity */
+		shadfac[3]*= phongcorr;	/* note, shadfac not allowed to be stored nonlocal */
+		
 		if(shadfac[3]>0.0f && shi->spec!=0.0f && !(lar->mode & LA_NO_SPEC) && !(lar->mode & LA_ONLYSHADOW)) {
 			
 			if(!(passflag & (SCE_PASS_COMBINED|SCE_PASS_SPEC)));

Modified: branches/blender-2.47/source/blender/src/drawobject.c
===================================================================
--- branches/blender-2.47/source/blender/src/drawobject.c	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/blender/src/drawobject.c	2008-07-20 21:51:00 UTC (rev 15661)
@@ -1199,7 +1199,12 @@
 	int use_wcol= 0;
 
 	lt= (ob==G.obedit)?editLatt:ob->data;
+	
+	/* now we default make displist, this will modifiers work for non animated case */
+	if(ob->disp.first==NULL)
+		lattice_calc_modifiers(ob);
 	dl= find_displist(&ob->disp, DL_VERTS);
+	
 	if(ob==G.obedit) {
 		cpack(0x004000);
 		

Modified: branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
===================================================================
--- branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp	2008-07-20 21:51:00 UTC (rev 15661)
@@ -13,6 +13,7 @@
 #include "KX_ClientObjectInfo.h"
 
 #include "PHY_IPhysicsEnvironment.h"
+#include "CcdPhysicsEnvironment.h"
 
 
 KX_BulletPhysicsController::KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna)
@@ -160,10 +161,17 @@
 	btRigidBody *body = GetRigidBody();
 	if (body->getActivationState() != DISABLE_SIMULATION)
 	{
+		btBroadphaseProxy* handle = body->getBroadphaseHandle();
 		m_savedCollisionFlags = body->getCollisionFlags();
+		m_savedMass = GetMass();
+		m_savedCollisionFilterGroup = handle->m_collisionFilterGroup;
+		m_savedCollisionFilterMask = handle->m_collisionFilterMask;
 		body->setActivationState(DISABLE_SIMULATION);
-		body->setCollisionFlags((btCollisionObject::CF_STATIC_OBJECT)|
-			((ghost)?btCollisionObject::CF_NO_CONTACT_RESPONSE:0));
+		GetPhysicsEnvironment()->updateCcdPhysicsController(this, 
+			0.0,
+			btCollisionObject::CF_STATIC_OBJECT|((ghost)?btCollisionObject::CF_NO_CONTACT_RESPONSE:(m_savedCollisionFlags&btCollisionObject::CF_NO_CONTACT_RESPONSE)),
+			btBroadphaseProxy::StaticFilter, 
+			btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter);
 	}
 }
 
@@ -172,8 +180,12 @@
 	btRigidBody *body = GetRigidBody();
 	if (body->getActivationState() == DISABLE_SIMULATION)
 	{
+		GetPhysicsEnvironment()->updateCcdPhysicsController(this, 
+			m_savedMass,
+			m_savedCollisionFlags,
+			m_savedCollisionFilterGroup,
+			m_savedCollisionFilterMask);
 		GetRigidBody()->forceActivationState(ACTIVE_TAG);
-		body->setCollisionFlags(m_savedCollisionFlags);
 	}
 }
 

Modified: branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.h
===================================================================
--- branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/gameengine/Ketsji/KX_BulletPhysicsController.h	2008-07-20 21:51:00 UTC (rev 15661)
@@ -9,6 +9,10 @@
 {
 private:
 	int m_savedCollisionFlags;
+	short int m_savedCollisionFilterGroup;
+	short int m_savedCollisionFilterMask;
+	MT_Scalar m_savedMass;
+
 public:
 
 	KX_BulletPhysicsController (const CcdConstructionInfo& ci, bool dyna);

Modified: branches/blender-2.47/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- branches/blender-2.47/source/gameengine/Ketsji/KX_GameObject.cpp	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/gameengine/Ketsji/KX_GameObject.cpp	2008-07-20 21:51:00 UTC (rev 15661)
@@ -220,6 +220,10 @@
 		RemoveParent(scene);
 		obj->GetSGNode()->AddChild(GetSGNode());
 
+		if (m_pPhysicsController1) 
+		{
+			m_pPhysicsController1->SuspendDynamics(true);
+		}
 		// Set us to our new scale, position, and orientation
 		scale1[0] = scale1[0]/scale2[0];
 		scale1[1] = scale1[1]/scale2[1];
@@ -236,10 +240,6 @@
 		if (rootlist->RemoveValue(this))
 			// the object was in parent list, decrement ref count as it's now removed
 			Release();
-		if (m_pPhysicsController1) 
-		{
-			m_pPhysicsController1->SuspendDynamics(true);
-		}
 	}
 }
 
@@ -617,8 +617,12 @@
 
 void KX_GameObject::NodeSetLocalPosition(const MT_Point3& trans)
 {
-	if (m_pPhysicsController1)
+	if (m_pPhysicsController1 && (!GetSGNode() || !GetSGNode()->GetSGParent()))
 	{
+		// don't update physic controller if the object is a child:
+		// 1) the transformation will not be right
+		// 2) in this case, the physic controller is necessarily a static object
+		//    that is updated from the normal kinematic synchronization
 		m_pPhysicsController1->setPosition(trans);
 	}
 
@@ -630,25 +634,22 @@
 
 void KX_GameObject::NodeSetLocalOrientation(const MT_Matrix3x3& rot)
 {
-	if (m_pPhysicsController1)
+	if (m_pPhysicsController1 && (!GetSGNode() || !GetSGNode()->GetSGParent()))
 	{
+		// see note above
 		m_pPhysicsController1->setOrientation(rot.getRotation());
 	}
 	if (GetSGNode())
 		GetSGNode()->SetLocalOrientation(rot);
-	else
-	{
-		int i;
-		i=0;
-	}
 }
 
 
 
 void KX_GameObject::NodeSetLocalScale(const MT_Vector3& scale)
 {
-	if (m_pPhysicsController1)
+	if (m_pPhysicsController1 && (!GetSGNode() || !GetSGNode()->GetSGParent()))
 	{
+		// see note above
 		m_pPhysicsController1->setScaling(scale);
 	}
 	

Modified: branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsController.h
===================================================================
--- branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsController.h	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsController.h	2008-07-20 21:51:00 UTC (rev 15661)
@@ -106,6 +106,7 @@
 	btRigidBody* m_body;
 	class PHY_IMotionState*		m_MotionState;
 	btMotionState* 	m_bulletMotionState;
+	friend class CcdPhysicsEnvironment;	// needed when updating the controller
 
 
 	void*		m_newClientInfo;
@@ -194,7 +195,6 @@
 			return m_cci.m_collisionFilterMask;
 		}
 
-
 		virtual void	calcXform() {} ;
 		virtual void SetMargin(float margin) {};
 		virtual float GetMargin() const {return 0.f;};

Modified: branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
===================================================================
--- branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp	2008-07-20 21:51:00 UTC (rev 15661)
@@ -466,7 +466,39 @@
 
 }
 
+void	CcdPhysicsEnvironment::updateCcdPhysicsController(CcdPhysicsController* ctrl, btScalar newMass, int newCollisionFlags, short int newCollisionGroup, short int newCollisionMask)
+{
+	// this function is used when the collisionning group of a controller is changed
+	// remove and add the collistioning object
+	btRigidBody* body = ctrl->GetRigidBody();
+	btVector3 inertia;
 
+	m_dynamicsWorld->removeCollisionObject(body);
+	body->setCollisionFlags(newCollisionFlags);
+	body->getCollisionShape()->calculateLocalInertia(newMass, inertia);
+	body->setMassProps(newMass, inertia);
+	m_dynamicsWorld->addCollisionObject(body, newCollisionGroup, newCollisionMask);
+	// to avoid nasty interaction, we must update the property of the controller as well
+	ctrl->m_cci.m_mass = newMass;
+	ctrl->m_cci.m_collisionFilterGroup = newCollisionGroup;
+	ctrl->m_cci.m_collisionFilterMask = newCollisionMask;
+	ctrl->m_cci.m_collisionFlags = newCollisionFlags;
+}
+
+void CcdPhysicsEnvironment::enableCcdPhysicsController(CcdPhysicsController* ctrl)
+{
+	std::vector<CcdPhysicsController*>::iterator i =
+		std::find(m_controllers.begin(), m_controllers.end(), ctrl);
+	if (i == m_controllers.end())
+	{
+		btRigidBody* body = ctrl->GetRigidBody();
+		m_dynamicsWorld->addCollisionObject(body, 
+			ctrl->GetCollisionFilterGroup(), ctrl->GetCollisionFilterMask());
+	}
+}
+
+
+
 void	CcdPhysicsEnvironment::beginFrame()
 {
 

Modified: branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
===================================================================
--- branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h	2008-07-20 21:09:56 UTC (rev 15660)
+++ branches/blender-2.47/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h	2008-07-20 21:51:00 UTC (rev 15661)
@@ -183,6 +183,15 @@
 
 		void	removeCcdPhysicsController(CcdPhysicsController* ctrl);
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list