BulletSim: make all the different angularVerticalAttraction algorithms
selectable from configuration paramters. Changed default algorithm to "1" from previous default as it seems to handle Y axis correction a little better. Add config file independent enablement of vehicle angular forces to make debugging easier (independent testing of forces).cpu-performance
parent
76b2b20f7e
commit
fad4241e4e
|
@ -125,33 +125,12 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
static readonly float PIOverFour = ((float)Math.PI) / 4f;
|
static readonly float PIOverFour = ((float)Math.PI) / 4f;
|
||||||
static readonly float PIOverTwo = ((float)Math.PI) / 2f;
|
static readonly float PIOverTwo = ((float)Math.PI) / 2f;
|
||||||
|
|
||||||
// For debugging, flags to turn on and off individual corrections.
|
|
||||||
public bool enableAngularVerticalAttraction;
|
|
||||||
public bool enableAngularDeflection;
|
|
||||||
public bool enableAngularBanking;
|
|
||||||
|
|
||||||
public BSDynamics(BSScene myScene, BSPrim myPrim, string actorName)
|
public BSDynamics(BSScene myScene, BSPrim myPrim, string actorName)
|
||||||
: base(myScene, myPrim, actorName)
|
: base(myScene, myPrim, actorName)
|
||||||
{
|
{
|
||||||
ControllingPrim = myPrim;
|
ControllingPrim = myPrim;
|
||||||
Type = Vehicle.TYPE_NONE;
|
Type = Vehicle.TYPE_NONE;
|
||||||
m_haveRegisteredForSceneEvents = false;
|
m_haveRegisteredForSceneEvents = false;
|
||||||
SetupVehicleDebugging();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stopgap debugging enablement. Allows source level debugging but still checking
|
|
||||||
// in changes by making enablement of debugging flags from INI file.
|
|
||||||
public void SetupVehicleDebugging()
|
|
||||||
{
|
|
||||||
enableAngularVerticalAttraction = true;
|
|
||||||
enableAngularDeflection = true;
|
|
||||||
enableAngularBanking = true;
|
|
||||||
if (BSParam.VehicleDebuggingEnable)
|
|
||||||
{
|
|
||||||
enableAngularVerticalAttraction = true;
|
|
||||||
enableAngularDeflection = false;
|
|
||||||
enableAngularBanking = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return 'true' if this vehicle is doing vehicle things
|
// Return 'true' if this vehicle is doing vehicle things
|
||||||
|
@ -556,10 +535,10 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
}
|
}
|
||||||
|
|
||||||
m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale, m_linearMotorDecayTimescale, 1f);
|
m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale, m_linearMotorDecayTimescale, 1f);
|
||||||
m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
// m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
||||||
|
|
||||||
m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, m_angularMotorDecayTimescale, 1f);
|
m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, m_angularMotorDecayTimescale, 1f);
|
||||||
m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
// m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
||||||
|
|
||||||
/* Not implemented
|
/* Not implemented
|
||||||
m_verticalAttractionMotor = new BSVMotor("VerticalAttraction", m_verticalAttractionTimescale,
|
m_verticalAttractionMotor = new BSVMotor("VerticalAttraction", m_verticalAttractionTimescale,
|
||||||
|
@ -1393,116 +1372,134 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
{
|
{
|
||||||
|
|
||||||
// If vertical attaction timescale is reasonable
|
// If vertical attaction timescale is reasonable
|
||||||
if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
if (BSParam.VehicleEnableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
||||||
{
|
{
|
||||||
//Another formula to try got from :
|
Vector3 vehicleUpAxis = Vector3.UnitZ * VehicleOrientation;
|
||||||
//http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html
|
switch (BSParam.VehicleAngularVerticalAttractionAlgorithm)
|
||||||
|
|
||||||
Vector3 VehicleUpAxis = Vector3.UnitZ * VehicleOrientation;
|
|
||||||
|
|
||||||
// Flipping what was originally a timescale into a speed variable and then multiplying it by 2
|
|
||||||
// since only computing half the distance between the angles.
|
|
||||||
float VerticalAttractionSpeed = (1 / m_verticalAttractionTimescale) * 2.0f;
|
|
||||||
|
|
||||||
// Make a prediction of where the up axis will be when this is applied rather then where it is now as
|
|
||||||
// this makes for a smoother adjustment and less fighting between the various forces.
|
|
||||||
Vector3 predictedUp = VehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f);
|
|
||||||
|
|
||||||
// This is only half the distance to the target so it will take 2 seconds to complete the turn.
|
|
||||||
Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ);
|
|
||||||
|
|
||||||
// Scale vector by our timescale since it is an acceleration it is r/s^2 or radians a timescale squared
|
|
||||||
Vector3 vertContributionV = torqueVector * VerticalAttractionSpeed * VerticalAttractionSpeed;
|
|
||||||
|
|
||||||
VehicleRotationalVelocity += vertContributionV;
|
|
||||||
|
|
||||||
VDetailLog("{0}, MoveAngular,verticalAttraction,UpAxis={1},PredictedUp={2},torqueVector={3},contrib={4}",
|
|
||||||
ControllingPrim.LocalID,
|
|
||||||
VehicleUpAxis,
|
|
||||||
predictedUp,
|
|
||||||
torqueVector,
|
|
||||||
vertContributionV);
|
|
||||||
//=====================================================================
|
|
||||||
/*
|
|
||||||
// Possible solution derived from a discussion at:
|
|
||||||
// http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no
|
|
||||||
|
|
||||||
// Create a rotation that is only the vehicle's rotation around Z
|
|
||||||
Vector3 currentEuler = Vector3.Zero;
|
|
||||||
VehicleOrientation.GetEulerAngles(out currentEuler.X, out currentEuler.Y, out currentEuler.Z);
|
|
||||||
Quaternion justZOrientation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, currentEuler.Z);
|
|
||||||
|
|
||||||
// Create the axis that is perpendicular to the up vector and the rotated up vector.
|
|
||||||
Vector3 differenceAxis = Vector3.Cross(Vector3.UnitZ * justZOrientation, Vector3.UnitZ * VehicleOrientation);
|
|
||||||
// Compute the angle between those to vectors.
|
|
||||||
double differenceAngle = Math.Acos((double)Vector3.Dot(Vector3.UnitZ, Vector3.Normalize(Vector3.UnitZ * VehicleOrientation)));
|
|
||||||
// 'differenceAngle' is the angle to rotate and 'differenceAxis' is the plane to rotate in to get the vehicle vertical
|
|
||||||
|
|
||||||
// Reduce the change by the time period it is to change in. Timestep is handled when velocity is applied.
|
|
||||||
// TODO: add 'efficiency'.
|
|
||||||
differenceAngle /= m_verticalAttractionTimescale;
|
|
||||||
|
|
||||||
// Create the quaterian representing the correction angle
|
|
||||||
Quaternion correctionRotation = Quaternion.CreateFromAxisAngle(differenceAxis, (float)differenceAngle);
|
|
||||||
|
|
||||||
// Turn that quaternion into Euler values to make it into velocities to apply.
|
|
||||||
Vector3 vertContributionV = Vector3.Zero;
|
|
||||||
correctionRotation.GetEulerAngles(out vertContributionV.X, out vertContributionV.Y, out vertContributionV.Z);
|
|
||||||
vertContributionV *= -1f;
|
|
||||||
|
|
||||||
VehicleRotationalVelocity += vertContributionV;
|
|
||||||
|
|
||||||
VDetailLog("{0}, MoveAngular,verticalAttraction,diffAxis={1},diffAng={2},corrRot={3},contrib={4}",
|
|
||||||
ControllingPrim.LocalID,
|
|
||||||
differenceAxis,
|
|
||||||
differenceAngle,
|
|
||||||
correctionRotation,
|
|
||||||
vertContributionV);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// ===================================================================
|
|
||||||
/*
|
|
||||||
Vector3 vertContributionV = Vector3.Zero;
|
|
||||||
Vector3 origRotVelW = VehicleRotationalVelocity; // DEBUG DEBUG
|
|
||||||
|
|
||||||
// Take a vector pointing up and convert it from world to vehicle relative coords.
|
|
||||||
Vector3 verticalError = Vector3.Normalize(Vector3.UnitZ * VehicleOrientation);
|
|
||||||
|
|
||||||
// If vertical attraction correction is needed, the vector that was pointing up (UnitZ)
|
|
||||||
// is now:
|
|
||||||
// leaning to one side: rotated around the X axis with the Y value going
|
|
||||||
// from zero (nearly straight up) to one (completely to the side)) or
|
|
||||||
// leaning front-to-back: rotated around the Y axis with the value of X being between
|
|
||||||
// zero and one.
|
|
||||||
// The value of Z is how far the rotation is off with 1 meaning none and 0 being 90 degrees.
|
|
||||||
|
|
||||||
// Y error means needed rotation around X axis and visa versa.
|
|
||||||
// Since the error goes from zero to one, the asin is the corresponding angle.
|
|
||||||
vertContributionV.X = (float)Math.Asin(verticalError.Y);
|
|
||||||
// (Tilt forward (positive X) needs to tilt back (rotate negative) around Y axis.)
|
|
||||||
vertContributionV.Y = -(float)Math.Asin(verticalError.X);
|
|
||||||
|
|
||||||
// If verticalError.Z is negative, the vehicle is upside down. Add additional push.
|
|
||||||
if (verticalError.Z < 0f)
|
|
||||||
{
|
{
|
||||||
vertContributionV.X += Math.Sign(vertContributionV.X) * PIOverFour;
|
case 0:
|
||||||
// vertContribution.Y -= PIOverFour;
|
{
|
||||||
|
//Another formula to try got from :
|
||||||
|
//http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html
|
||||||
|
|
||||||
|
// Flipping what was originally a timescale into a speed variable and then multiplying it by 2
|
||||||
|
// since only computing half the distance between the angles.
|
||||||
|
float VerticalAttractionSpeed = (1 / m_verticalAttractionTimescale) * 2.0f;
|
||||||
|
|
||||||
|
// Make a prediction of where the up axis will be when this is applied rather then where it is now as
|
||||||
|
// this makes for a smoother adjustment and less fighting between the various forces.
|
||||||
|
Vector3 predictedUp = vehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f);
|
||||||
|
|
||||||
|
// This is only half the distance to the target so it will take 2 seconds to complete the turn.
|
||||||
|
Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ);
|
||||||
|
|
||||||
|
// Scale vector by our timescale since it is an acceleration it is r/s^2 or radians a timescale squared
|
||||||
|
Vector3 vertContributionV = torqueVector * VerticalAttractionSpeed * VerticalAttractionSpeed;
|
||||||
|
|
||||||
|
VehicleRotationalVelocity += vertContributionV;
|
||||||
|
|
||||||
|
VDetailLog("{0}, MoveAngular,verticalAttraction,upAxis={1},PredictedUp={2},torqueVector={3},contrib={4}",
|
||||||
|
ControllingPrim.LocalID,
|
||||||
|
vehicleUpAxis,
|
||||||
|
predictedUp,
|
||||||
|
torqueVector,
|
||||||
|
vertContributionV);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
// Possible solution derived from a discussion at:
|
||||||
|
// http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no
|
||||||
|
|
||||||
|
// Create a rotation that is only the vehicle's rotation around Z
|
||||||
|
Vector3 currentEuler = Vector3.Zero;
|
||||||
|
VehicleOrientation.GetEulerAngles(out currentEuler.X, out currentEuler.Y, out currentEuler.Z);
|
||||||
|
Quaternion justZOrientation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, currentEuler.Z);
|
||||||
|
|
||||||
|
// Create the axis that is perpendicular to the up vector and the rotated up vector.
|
||||||
|
Vector3 differenceAxis = Vector3.Cross(Vector3.UnitZ * justZOrientation, Vector3.UnitZ * VehicleOrientation);
|
||||||
|
// Compute the angle between those to vectors.
|
||||||
|
double differenceAngle = Math.Acos((double)Vector3.Dot(Vector3.UnitZ, Vector3.Normalize(Vector3.UnitZ * VehicleOrientation)));
|
||||||
|
// 'differenceAngle' is the angle to rotate and 'differenceAxis' is the plane to rotate in to get the vehicle vertical
|
||||||
|
|
||||||
|
// Reduce the change by the time period it is to change in. Timestep is handled when velocity is applied.
|
||||||
|
// TODO: add 'efficiency'.
|
||||||
|
differenceAngle /= m_verticalAttractionTimescale;
|
||||||
|
|
||||||
|
// Create the quaterian representing the correction angle
|
||||||
|
Quaternion correctionRotation = Quaternion.CreateFromAxisAngle(differenceAxis, (float)differenceAngle);
|
||||||
|
|
||||||
|
// Turn that quaternion into Euler values to make it into velocities to apply.
|
||||||
|
Vector3 vertContributionV = Vector3.Zero;
|
||||||
|
correctionRotation.GetEulerAngles(out vertContributionV.X, out vertContributionV.Y, out vertContributionV.Z);
|
||||||
|
vertContributionV *= -1f;
|
||||||
|
|
||||||
|
VehicleRotationalVelocity += vertContributionV;
|
||||||
|
|
||||||
|
VDetailLog("{0}, MoveAngular,verticalAttraction,upAxis={1},diffAxis={2},diffAng={3},corrRot={4},contrib={5}",
|
||||||
|
ControllingPrim.LocalID,
|
||||||
|
vehicleUpAxis,
|
||||||
|
differenceAxis,
|
||||||
|
differenceAngle,
|
||||||
|
correctionRotation,
|
||||||
|
vertContributionV);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
Vector3 vertContributionV = Vector3.Zero;
|
||||||
|
Vector3 origRotVelW = VehicleRotationalVelocity; // DEBUG DEBUG
|
||||||
|
|
||||||
|
// Take a vector pointing up and convert it from world to vehicle relative coords.
|
||||||
|
Vector3 verticalError = Vector3.Normalize(Vector3.UnitZ * VehicleOrientation);
|
||||||
|
|
||||||
|
// If vertical attraction correction is needed, the vector that was pointing up (UnitZ)
|
||||||
|
// is now:
|
||||||
|
// leaning to one side: rotated around the X axis with the Y value going
|
||||||
|
// from zero (nearly straight up) to one (completely to the side)) or
|
||||||
|
// leaning front-to-back: rotated around the Y axis with the value of X being between
|
||||||
|
// zero and one.
|
||||||
|
// The value of Z is how far the rotation is off with 1 meaning none and 0 being 90 degrees.
|
||||||
|
|
||||||
|
// Y error means needed rotation around X axis and visa versa.
|
||||||
|
// Since the error goes from zero to one, the asin is the corresponding angle.
|
||||||
|
vertContributionV.X = (float)Math.Asin(verticalError.Y);
|
||||||
|
// (Tilt forward (positive X) needs to tilt back (rotate negative) around Y axis.)
|
||||||
|
vertContributionV.Y = -(float)Math.Asin(verticalError.X);
|
||||||
|
|
||||||
|
// If verticalError.Z is negative, the vehicle is upside down. Add additional push.
|
||||||
|
if (verticalError.Z < 0f)
|
||||||
|
{
|
||||||
|
vertContributionV.X += Math.Sign(vertContributionV.X) * PIOverFour;
|
||||||
|
// vertContribution.Y -= PIOverFour;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 'vertContrbution' is now the necessary angular correction to correct tilt in one second.
|
||||||
|
// Correction happens over a number of seconds.
|
||||||
|
Vector3 unscaledContribVerticalErrorV = vertContributionV; // DEBUG DEBUG
|
||||||
|
|
||||||
|
// The correction happens over the user's time period
|
||||||
|
vertContributionV /= m_verticalAttractionTimescale;
|
||||||
|
|
||||||
|
// Rotate the vehicle rotation to the world coordinates.
|
||||||
|
VehicleRotationalVelocity += (vertContributionV * VehicleOrientation);
|
||||||
|
|
||||||
|
VDetailLog("{0}, MoveAngular,verticalAttraction,,upAxis={1},origRotVW={2},vertError={3},unscaledV={4},eff={5},ts={6},vertContribV={7}",
|
||||||
|
ControllingPrim.LocalID,
|
||||||
|
vehicleUpAxis,
|
||||||
|
origRotVelW,
|
||||||
|
verticalError,
|
||||||
|
unscaledContribVerticalErrorV,
|
||||||
|
m_verticalAttractionEfficiency,
|
||||||
|
m_verticalAttractionTimescale,
|
||||||
|
vertContributionV);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'vertContrbution' is now the necessary angular correction to correct tilt in one second.
|
|
||||||
// Correction happens over a number of seconds.
|
|
||||||
Vector3 unscaledContribVerticalErrorV = vertContributionV; // DEBUG DEBUG
|
|
||||||
|
|
||||||
// The correction happens over the user's time period
|
|
||||||
vertContributionV /= m_verticalAttractionTimescale;
|
|
||||||
|
|
||||||
// Rotate the vehicle rotation to the world coordinates.
|
|
||||||
VehicleRotationalVelocity += (vertContributionV * VehicleOrientation);
|
|
||||||
|
|
||||||
VDetailLog("{0}, MoveAngular,verticalAttraction,,origRotVW={1},vertError={2},unscaledV={3},eff={4},ts={5},vertContribV={6}",
|
|
||||||
Prim.LocalID, origRotVelW, verticalError, unscaledContribVerticalErrorV,
|
|
||||||
m_verticalAttractionEfficiency, m_verticalAttractionTimescale, vertContributionV);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1514,7 +1511,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
public void ComputeAngularDeflection()
|
public void ComputeAngularDeflection()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (enableAngularDeflection && m_angularDeflectionEfficiency != 0 && VehicleForwardSpeed > 0.2)
|
if (BSParam.VehicleEnableAngularDeflection && m_angularDeflectionEfficiency != 0 && VehicleForwardSpeed > 0.2)
|
||||||
{
|
{
|
||||||
Vector3 deflectContributionV = Vector3.Zero;
|
Vector3 deflectContributionV = Vector3.Zero;
|
||||||
|
|
||||||
|
@ -1593,7 +1590,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
// make a sluggish vehicle by giving it a timescale of several seconds.
|
// make a sluggish vehicle by giving it a timescale of several seconds.
|
||||||
public void ComputeAngularBanking()
|
public void ComputeAngularBanking()
|
||||||
{
|
{
|
||||||
if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
if (BSParam.VehicleEnableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
||||||
{
|
{
|
||||||
Vector3 bankingContributionV = Vector3.Zero;
|
Vector3 bankingContributionV = Vector3.Zero;
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,10 @@ public static class BSParam
|
||||||
public static Vector3 VehicleInertiaFactor { get; private set; }
|
public static Vector3 VehicleInertiaFactor { get; private set; }
|
||||||
public static float VehicleGroundGravityFudge { get; private set; }
|
public static float VehicleGroundGravityFudge { get; private set; }
|
||||||
public static float VehicleAngularBankingTimescaleFudge { get; private set; }
|
public static float VehicleAngularBankingTimescaleFudge { get; private set; }
|
||||||
public static bool VehicleDebuggingEnable { get; private set; }
|
public static bool VehicleEnableAngularVerticalAttraction { get; private set; }
|
||||||
|
public static int VehicleAngularVerticalAttractionAlgorithm { get; private set; }
|
||||||
|
public static bool VehicleEnableAngularDeflection { get; private set; }
|
||||||
|
public static bool VehicleEnableAngularBanking { get; private set; }
|
||||||
|
|
||||||
// Convex Hulls
|
// Convex Hulls
|
||||||
public static int CSHullMaxDepthSplit { get; private set; }
|
public static int CSHullMaxDepthSplit { get; private set; }
|
||||||
|
@ -606,8 +609,14 @@ public static class BSParam
|
||||||
0.2f ),
|
0.2f ),
|
||||||
new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.",
|
new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.",
|
||||||
60.0f ),
|
60.0f ),
|
||||||
new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging",
|
new ParameterDefn<bool>("VehicleEnableAngularVerticalAttraction", "Turn on/off vehicle angular vertical attraction effect",
|
||||||
false ),
|
true ),
|
||||||
|
new ParameterDefn<int>("VehicleAngularVerticalAttractionAlgorithm", "Select vertical attraction algo. You need to look at the source.",
|
||||||
|
1 ),
|
||||||
|
new ParameterDefn<bool>("VehicleEnableAngularDeflection", "Turn on/off vehicle angular deflection effect",
|
||||||
|
true ),
|
||||||
|
new ParameterDefn<bool>("VehicleEnableAngularBanking", "Turn on/off vehicle angular banking effect",
|
||||||
|
true ),
|
||||||
|
|
||||||
new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)",
|
new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)",
|
||||||
0f,
|
0f,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
*
|
*
|
||||||
|
@ -648,7 +648,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
|
||||||
simTime = Util.EnvironmentTickCountSubtract(beforeTime);
|
simTime = Util.EnvironmentTickCountSubtract(beforeTime);
|
||||||
if (PhysicsLogging.Enabled)
|
if (PhysicsLogging.Enabled)
|
||||||
{
|
{
|
||||||
DetailLog("{0},DoPhysicsStep,call, frame={1}, nTaints={2}, simTime={3}, substeps={4}, updates={5}, colliders={6}, objWColl={7}",
|
DetailLog("{0},DoPhysicsStep,complete,frame={1}, nTaints={2}, simTime={3}, substeps={4}, updates={5}, colliders={6}, objWColl={7}",
|
||||||
DetailLogZero, m_simulationStep, numTaints, simTime, numSubSteps,
|
DetailLogZero, m_simulationStep, numTaints, simTime, numSubSteps,
|
||||||
updatedEntityCount, collidersCount, ObjectsWithCollisions.Count);
|
updatedEntityCount, collidersCount, ObjectsWithCollisions.Count);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,8 @@ public class BasicVehicles : OpenSimTestCase
|
||||||
public void Init()
|
public void Init()
|
||||||
{
|
{
|
||||||
Dictionary<string, string> engineParams = new Dictionary<string, string>();
|
Dictionary<string, string> engineParams = new Dictionary<string, string>();
|
||||||
|
engineParams.Add("VehicleEnableAngularVerticalAttraction", "true");
|
||||||
|
engineParams.Add("VehicleAngularVerticalAttractionAlgorithm", "1");
|
||||||
PhysicsScene = BulletSimTestsUtil.CreateBasicPhysicsEngine(engineParams);
|
PhysicsScene = BulletSimTestsUtil.CreateBasicPhysicsEngine(engineParams);
|
||||||
|
|
||||||
PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateSphere();
|
PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateSphere();
|
||||||
|
@ -119,7 +121,7 @@ public class BasicVehicles : OpenSimTestCase
|
||||||
{
|
{
|
||||||
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency);
|
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency);
|
||||||
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale);
|
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale);
|
||||||
vehicleActor.enableAngularVerticalAttraction = true;
|
// vehicleActor.enableAngularVerticalAttraction = true;
|
||||||
|
|
||||||
TestVehicle.IsPhysical = true;
|
TestVehicle.IsPhysical = true;
|
||||||
PhysicsScene.ProcessTaints();
|
PhysicsScene.ProcessTaints();
|
||||||
|
|
Loading…
Reference in New Issue