升级obi
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS)
|
||||
using Unity.Mathematics;
|
||||
#endif
|
||||
|
||||
namespace Obi
|
||||
{
|
||||
public struct ContactEffectiveMasses
|
||||
{
|
||||
public float normalInvMassA;
|
||||
public float tangentInvMassA;
|
||||
public float bitangentInvMassA;
|
||||
|
||||
public float normalInvMassB;
|
||||
public float tangentInvMassB;
|
||||
public float bitangentInvMassB;
|
||||
|
||||
public float TotalNormalInvMass => normalInvMassA + normalInvMassB;
|
||||
public float TotalTangentInvMass => tangentInvMassA + tangentInvMassB;
|
||||
public float TotalBitangentInvMass => bitangentInvMassA + bitangentInvMassB;
|
||||
|
||||
public void ClearContactMassesA()
|
||||
{
|
||||
normalInvMassA = tangentInvMassA = bitangentInvMassA = 0;
|
||||
}
|
||||
|
||||
public void ClearContactMassesB()
|
||||
{
|
||||
normalInvMassB = tangentInvMassB = bitangentInvMassB = 0;
|
||||
}
|
||||
|
||||
#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS)
|
||||
public void CalculateContactMassesA(float invMass,
|
||||
float4 inverseInertiaTensor,
|
||||
float4 position,
|
||||
quaternion orientation,
|
||||
float4 contactPoint,
|
||||
float4 normal,
|
||||
float4 tangent,
|
||||
float4 bitangent,
|
||||
bool rollingContacts)
|
||||
{
|
||||
// initialize inverse linear masses:
|
||||
normalInvMassA = tangentInvMassA = bitangentInvMassA = invMass;
|
||||
|
||||
if (rollingContacts)
|
||||
{
|
||||
float4 rA = contactPoint - position;
|
||||
float4x4 solverInertiaA = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation);
|
||||
|
||||
normalInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, normal);
|
||||
tangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, tangent);
|
||||
bitangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, bitangent);
|
||||
}
|
||||
}
|
||||
|
||||
public void CalculateContactMassesB(float invMass,
|
||||
float4 inverseInertiaTensor,
|
||||
float4 position,
|
||||
quaternion orientation,
|
||||
float4 contactPoint,
|
||||
float4 normal,
|
||||
float4 tangent,
|
||||
float4 bitangent,
|
||||
bool rollingContacts)
|
||||
{
|
||||
// initialize inverse linear masses:
|
||||
normalInvMassB = tangentInvMassB = bitangentInvMassB = invMass;
|
||||
|
||||
if (rollingContacts)
|
||||
{
|
||||
float4 rB = contactPoint - position;
|
||||
float4x4 solverInertiaB = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation);
|
||||
|
||||
normalInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, normal);
|
||||
tangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, tangent);
|
||||
bitangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, bitangent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void CalculateContactMassesB(in BurstRigidbody rigidbody, in BurstAffineTransform solver2World, float4 pointB, float4 normal, float4 tangent, float4 bitangent)
|
||||
{
|
||||
float4 rB = solver2World.TransformPoint(pointB) - rigidbody.com;
|
||||
|
||||
// initialize inverse linear masses:
|
||||
normalInvMassB = tangentInvMassB = bitangentInvMassB = rigidbody.inverseMass;
|
||||
normalInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, normal);
|
||||
tangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, tangent);
|
||||
bitangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, bitangent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user