forked from bartvdbraak/blender
fixed some motionstate synchronization issues
nearsensor was not synchronized at the start wheels not synchronized properly (one frame delay)
This commit is contained in:
parent
fc691cdb5e
commit
2ec5d00da9
@ -73,7 +73,7 @@ void KX_MotionState::getWorldOrientation(float& quatIma0,float& quatIma1,float&
|
||||
void KX_MotionState::setWorldPosition(float posX,float posY,float posZ)
|
||||
{
|
||||
m_node->SetLocalPosition(MT_Point3(posX,posY,posZ));
|
||||
//m_node->SetWorldPosition(MT_Point3(posX,posY,posZ));
|
||||
m_node->SetWorldPosition(MT_Point3(posX,posY,posZ));
|
||||
}
|
||||
|
||||
void KX_MotionState::setWorldOrientation(float quatIma0,float quatIma1,float quatIma2,float quatReal)
|
||||
@ -85,7 +85,7 @@ void KX_MotionState::setWorldOrientation(float quatIma0,float quatIma1,float qua
|
||||
orn[3] = quatReal;
|
||||
|
||||
m_node->SetLocalOrientation(orn);
|
||||
//m_node->SetWorldOrientation(orn);
|
||||
m_node->SetWorldOrientation(orn);
|
||||
|
||||
}
|
||||
|
||||
|
@ -116,6 +116,7 @@ CValue* KX_NearSensor::GetReplica()
|
||||
//replica->m_sumoObj->setMargin(m_Margin);
|
||||
//replica->m_sumoObj->setClientObject(replica->m_client_info);
|
||||
|
||||
((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL);
|
||||
replica->SynchronizeTransform();
|
||||
|
||||
return replica;
|
||||
@ -139,7 +140,7 @@ void KX_NearSensor::ReParent(SCA_IObject* parent)
|
||||
client_info->m_sensors.push_back(this);
|
||||
SCA_ISensor::ReParent(parent);
|
||||
*/
|
||||
|
||||
((KX_GameObject*)GetParent())->GetSGNode()->ComputeWorldTransforms(NULL);
|
||||
SynchronizeTransform();
|
||||
}
|
||||
|
||||
|
@ -103,6 +103,7 @@ CValue* KX_RadarSensor::GetReplica()
|
||||
//replica->m_sumoObj->setMargin(m_Margin);
|
||||
//replica->m_sumoObj->setClientObject(replica->m_client_info);
|
||||
|
||||
((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL);
|
||||
replica->SynchronizeTransform();
|
||||
|
||||
return replica;
|
||||
|
@ -54,8 +54,10 @@ void KX_TouchSensor::SynchronizeTransform()
|
||||
|
||||
if (m_physCtrl)
|
||||
{
|
||||
MT_Vector3 pos = ((KX_GameObject*)GetParent())->NodeGetWorldPosition();
|
||||
MT_Quaternion orn = ((KX_GameObject*)GetParent())->NodeGetWorldOrientation().getRotation();
|
||||
|
||||
KX_GameObject* parent = ((KX_GameObject*)GetParent());
|
||||
MT_Vector3 pos = parent->NodeGetWorldPosition();
|
||||
MT_Quaternion orn = parent->NodeGetWorldOrientation().getRotation();
|
||||
m_physCtrl->setPosition(pos.x(),pos.y(),pos.z());
|
||||
m_physCtrl->setOrientation(orn.x(),orn.y(),orn.z(),orn.w());
|
||||
m_physCtrl->calcXform();
|
||||
|
@ -99,7 +99,7 @@ public:
|
||||
m_blenderMotionState->setWorldPosition(worldTrans.getOrigin().getX(),worldTrans.getOrigin().getY(),worldTrans.getOrigin().getZ());
|
||||
btQuaternion rotQuat = worldTrans.getRotation();
|
||||
m_blenderMotionState->setWorldOrientation(rotQuat[0],rotQuat[1],rotQuat[2],rotQuat[3]);
|
||||
|
||||
m_blenderMotionState->calculateWorldTransformations();
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -108,7 +108,8 @@ public:
|
||||
{
|
||||
btWheelInfo& info = m_vehicle->getWheelInfo(i);
|
||||
PHY_IMotionState* motionState = (PHY_IMotionState*)info.m_clientInfo ;
|
||||
m_vehicle->updateWheelTransform(i,true);
|
||||
// m_vehicle->updateWheelTransformsWS(info,false);
|
||||
m_vehicle->updateWheelTransform(i,false);
|
||||
btTransform trans = m_vehicle->getWheelInfo(i).m_worldTransform;
|
||||
btQuaternion orn = trans.getRotation();
|
||||
const btVector3& pos = trans.getOrigin();
|
||||
@ -463,7 +464,7 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
|
||||
for (i=0;i<numCtrl;i++)
|
||||
{
|
||||
CcdPhysicsController* ctrl = GetPhysicsController(i);
|
||||
//ctrl->SynchronizeMotionStates(timeStep);
|
||||
ctrl->SynchronizeMotionStates(timeStep);
|
||||
}
|
||||
|
||||
for (i=0;i<m_wrapperVehicles.size();i++)
|
||||
@ -829,6 +830,8 @@ void CcdPhysicsEnvironment::addSensor(PHY_IPhysicsController* ctrl)
|
||||
}
|
||||
//force collision detection with everything, including static objects (might hurt performance!)
|
||||
ctrl1->GetRigidBody()->getBroadphaseHandle()->m_collisionFilterMask = btBroadphaseProxy::AllFilter;
|
||||
ctrl1->GetRigidBody()->getBroadphaseHandle()->m_collisionFilterGroup = btBroadphaseProxy::AllFilter;
|
||||
//todo: make this 'sensor'!
|
||||
|
||||
requestCollisionCallback(ctrl);
|
||||
//printf("addSensor\n");
|
||||
|
Loading…
Reference in New Issue
Block a user