Optimizations
This commit is contained in:
parent
fcf7def577
commit
1bc1f0621e
|
@ -47,7 +47,8 @@ void DynamicsSystem::integrateRigidBodiesPositions(decimal timeStep, bool isSpli
|
||||||
|
|
||||||
const decimal isSplitImpulseFactor = isSplitImpulseActive ? decimal(1.0) : decimal(0.0);
|
const decimal isSplitImpulseFactor = isSplitImpulseActive ? decimal(1.0) : decimal(0.0);
|
||||||
|
|
||||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
|
||||||
|
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||||
|
|
||||||
// Get the constrained velocity
|
// Get the constrained velocity
|
||||||
Vector3 newLinVelocity = mRigidBodyComponents.mConstrainedLinearVelocities[i];
|
Vector3 newLinVelocity = mRigidBodyComponents.mConstrainedLinearVelocities[i];
|
||||||
|
@ -74,7 +75,8 @@ void DynamicsSystem::updateBodiesState() {
|
||||||
|
|
||||||
RP3D_PROFILE("DynamicsSystem::updateBodiesState()", mProfiler);
|
RP3D_PROFILE("DynamicsSystem::updateBodiesState()", mProfiler);
|
||||||
|
|
||||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
|
||||||
|
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||||
|
|
||||||
// Update the linear and angular velocity of the body
|
// Update the linear and angular velocity of the body
|
||||||
mRigidBodyComponents.mLinearVelocities[i] = mRigidBodyComponents.mConstrainedLinearVelocities[i];
|
mRigidBodyComponents.mLinearVelocities[i] = mRigidBodyComponents.mConstrainedLinearVelocities[i];
|
||||||
|
@ -89,7 +91,7 @@ void DynamicsSystem::updateBodiesState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the position of the body (using the new center of mass and new orientation)
|
// Update the position of the body (using the new center of mass and new orientation)
|
||||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||||
|
|
||||||
Transform& transform = mTransformComponents.getTransform(mRigidBodyComponents.mBodiesEntities[i]);
|
Transform& transform = mTransformComponents.getTransform(mRigidBodyComponents.mBodiesEntities[i]);
|
||||||
const Vector3& centerOfMassWorld = mRigidBodyComponents.mCentersOfMassWorld[i];
|
const Vector3& centerOfMassWorld = mRigidBodyComponents.mCentersOfMassWorld[i];
|
||||||
|
@ -98,7 +100,8 @@ void DynamicsSystem::updateBodiesState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the local-to-world transform of the colliders
|
// Update the local-to-world transform of the colliders
|
||||||
for (uint32 i=0; i < mColliderComponents.getNbEnabledComponents(); i++) {
|
const uint32 nbColliderComponents = mColliderComponents.getNbEnabledComponents();
|
||||||
|
for (uint32 i=0; i < nbColliderComponents; i++) {
|
||||||
|
|
||||||
// Update the local-to-world transform of the collider
|
// Update the local-to-world transform of the collider
|
||||||
mColliderComponents.mLocalToWorldTransforms[i] = mTransformComponents.getTransform(mColliderComponents.mBodiesEntities[i]) *
|
mColliderComponents.mLocalToWorldTransforms[i] = mTransformComponents.getTransform(mColliderComponents.mBodiesEntities[i]) *
|
||||||
|
@ -119,7 +122,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
|
||||||
resetSplitVelocities();
|
resetSplitVelocities();
|
||||||
|
|
||||||
// Integration component velocities using force/torque
|
// Integration component velocities using force/torque
|
||||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
const uint32 nbEnabledRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
|
||||||
|
for (uint32 i=0; i < nbEnabledRigidBodyComponents; i++) {
|
||||||
|
|
||||||
assert(mRigidBodyComponents.mSplitLinearVelocities[i] == Vector3(0, 0, 0));
|
assert(mRigidBodyComponents.mSplitLinearVelocities[i] == Vector3(0, 0, 0));
|
||||||
assert(mRigidBodyComponents.mSplitAngularVelocities[i] == Vector3(0, 0, 0));
|
assert(mRigidBodyComponents.mSplitAngularVelocities[i] == Vector3(0, 0, 0));
|
||||||
|
@ -137,7 +141,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
|
||||||
// Apply gravity force
|
// Apply gravity force
|
||||||
if (mIsGravityEnabled) {
|
if (mIsGravityEnabled) {
|
||||||
|
|
||||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
|
||||||
|
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||||
|
|
||||||
// If the gravity has to be applied to this rigid body
|
// If the gravity has to be applied to this rigid body
|
||||||
if (mRigidBodyComponents.mIsGravityEnabled[i]) {
|
if (mRigidBodyComponents.mIsGravityEnabled[i]) {
|
||||||
|
@ -162,7 +167,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
|
||||||
// Using Taylor Serie for e^(-x) : e^x ~ 1 + x + x^2/2! + ...
|
// Using Taylor Serie for e^(-x) : e^x ~ 1 + x + x^2/2! + ...
|
||||||
// => e^(-x) ~ 1 - x
|
// => e^(-x) ~ 1 - x
|
||||||
// => v2 = v1 * (1 - c * dt)
|
// => v2 = v1 * (1 - c * dt)
|
||||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
|
||||||
|
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||||
|
|
||||||
const decimal linDampingFactor = mRigidBodyComponents.mLinearDampings[i];
|
const decimal linDampingFactor = mRigidBodyComponents.mLinearDampings[i];
|
||||||
const decimal angDampingFactor = mRigidBodyComponents.mAngularDampings[i];
|
const decimal angDampingFactor = mRigidBodyComponents.mAngularDampings[i];
|
||||||
|
@ -177,7 +183,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
|
||||||
void DynamicsSystem::resetBodiesForceAndTorque() {
|
void DynamicsSystem::resetBodiesForceAndTorque() {
|
||||||
|
|
||||||
// For each body of the world
|
// For each body of the world
|
||||||
for (uint32 i=0; i < mRigidBodyComponents.getNbComponents(); i++) {
|
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbComponents();
|
||||||
|
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||||
mRigidBodyComponents.mExternalForces[i].setToZero();
|
mRigidBodyComponents.mExternalForces[i].setToZero();
|
||||||
mRigidBodyComponents.mExternalTorques[i].setToZero();
|
mRigidBodyComponents.mExternalTorques[i].setToZero();
|
||||||
}
|
}
|
||||||
|
@ -186,7 +193,8 @@ void DynamicsSystem::resetBodiesForceAndTorque() {
|
||||||
// Reset the split velocities of the bodies
|
// Reset the split velocities of the bodies
|
||||||
void DynamicsSystem::resetSplitVelocities() {
|
void DynamicsSystem::resetSplitVelocities() {
|
||||||
|
|
||||||
for(uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
|
||||||
|
for(uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||||
mRigidBodyComponents.mSplitLinearVelocities[i].setToZero();
|
mRigidBodyComponents.mSplitLinearVelocities[i].setToZero();
|
||||||
mRigidBodyComponents.mSplitAngularVelocities[i].setToZero();
|
mRigidBodyComponents.mSplitAngularVelocities[i].setToZero();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user