apply external forces and torque to vehicles also, as other engines do
parent
ad76687227
commit
3f2291611f
|
@ -935,8 +935,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
float roll;
|
float roll;
|
||||||
float pitch;
|
float pitch;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float ftmp = m_invtimestep / m_verticalAttractionTimescale / m_verticalAttractionTimescale;
|
float ftmp = m_invtimestep / m_verticalAttractionTimescale / m_verticalAttractionTimescale;
|
||||||
|
|
||||||
float ftmp2;
|
float ftmp2;
|
||||||
|
@ -957,7 +955,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
effroll = 1 - effroll;
|
effroll = 1 - effroll;
|
||||||
effroll *= roll;
|
effroll *= roll;
|
||||||
|
|
||||||
|
|
||||||
torque.X += effroll * ftmp;
|
torque.X += effroll * ftmp;
|
||||||
|
|
||||||
if ((m_flags & VehicleFlag.LIMIT_ROLL_ONLY) == 0)
|
if ((m_flags & VehicleFlag.LIMIT_ROLL_ONLY) == 0)
|
||||||
|
@ -1074,10 +1071,14 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
torque.Z -= curLocalAngVel.Z * m_amdampZ;
|
torque.Z -= curLocalAngVel.Z * m_amdampZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
force *= dmass.mass;
|
||||||
|
|
||||||
|
force += rootPrim.m_force;
|
||||||
|
force += rootPrim.m_forceacc;
|
||||||
|
rootPrim.m_forceacc = Vector3.Zero;
|
||||||
|
|
||||||
if (force.X != 0 || force.Y != 0 || force.Z != 0)
|
if (force.X != 0 || force.Y != 0 || force.Z != 0)
|
||||||
{
|
{
|
||||||
force *= dmass.mass;
|
|
||||||
d.BodyAddForce(Body, force.X, force.Y, force.Z);
|
d.BodyAddForce(Body, force.X, force.Y, force.Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1091,6 +1092,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
d.MultiplyM3V3(out dvtmp, ref dmass.I, ref dtorque);
|
d.MultiplyM3V3(out dvtmp, ref dmass.I, ref dtorque);
|
||||||
d.BodyAddRelTorque(Body, dvtmp.X, dvtmp.Y, dvtmp.Z); // add torque in object frame
|
d.BodyAddRelTorque(Body, dvtmp.X, dvtmp.Y, dvtmp.Z); // add torque in object frame
|
||||||
}
|
}
|
||||||
|
|
||||||
|
torque = rootPrim.m_torque;
|
||||||
|
torque += rootPrim.m_angularForceacc;
|
||||||
|
rootPrim.m_angularForceacc = Vector3.Zero;
|
||||||
|
if (torque.X != 0 || torque.Y != 0 || torque.Z != 0)
|
||||||
|
d.BodyAddTorque(Body,torque.X, torque.Y, torque.Z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
|
|
||||||
private Vector3 _position;
|
private Vector3 _position;
|
||||||
private Vector3 _velocity;
|
private Vector3 _velocity;
|
||||||
private Vector3 m_torque;
|
|
||||||
private Vector3 m_lastVelocity;
|
private Vector3 m_lastVelocity;
|
||||||
private Vector3 m_lastposition;
|
private Vector3 m_lastposition;
|
||||||
private Vector3 m_rotationalVelocity;
|
private Vector3 m_rotationalVelocity;
|
||||||
|
@ -89,9 +88,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
private Vector3 _acceleration;
|
private Vector3 _acceleration;
|
||||||
private IntPtr Amotor;
|
private IntPtr Amotor;
|
||||||
|
|
||||||
private Vector3 m_force;
|
internal Vector3 m_force;
|
||||||
private Vector3 m_forceacc;
|
internal Vector3 m_forceacc;
|
||||||
private Vector3 m_angularForceacc;
|
internal Vector3 m_torque;
|
||||||
|
internal Vector3 m_angularForceacc;
|
||||||
|
|
||||||
private float m_invTimeStep;
|
private float m_invTimeStep;
|
||||||
private float m_timeStep;
|
private float m_timeStep;
|
||||||
|
|
Loading…
Reference in New Issue