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);
|
||||
|
||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
||||
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
|
||||
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||
|
||||
// Get the constrained velocity
|
||||
Vector3 newLinVelocity = mRigidBodyComponents.mConstrainedLinearVelocities[i];
|
||||
|
@ -74,7 +75,8 @@ void DynamicsSystem::updateBodiesState() {
|
|||
|
||||
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
|
||||
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)
|
||||
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
|
||||
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
|
||||
|
||||
Transform& transform = mTransformComponents.getTransform(mRigidBodyComponents.mBodiesEntities[i]);
|
||||
const Vector3& centerOfMassWorld = mRigidBodyComponents.mCentersOfMassWorld[i];
|
||||
|
@ -98,7 +100,8 @@ void DynamicsSystem::updateBodiesState() {
|
|||
}
|
||||
|
||||
// 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
|
||||
mColliderComponents.mLocalToWorldTransforms[i] = mTransformComponents.getTransform(mColliderComponents.mBodiesEntities[i]) *
|
||||
|
@ -119,7 +122,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
|
|||
resetSplitVelocities();
|
||||
|
||||
// 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.mSplitAngularVelocities[i] == Vector3(0, 0, 0));
|
||||
|
@ -137,7 +141,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
|
|||
// Apply gravity force
|
||||
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 (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! + ...
|
||||
// => e^(-x) ~ 1 - x
|
||||
// => 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 angDampingFactor = mRigidBodyComponents.mAngularDampings[i];
|
||||
|
@ -177,7 +183,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
|
|||
void DynamicsSystem::resetBodiesForceAndTorque() {
|
||||
|
||||
// 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.mExternalTorques[i].setToZero();
|
||||
}
|
||||
|
@ -186,7 +193,8 @@ void DynamicsSystem::resetBodiesForceAndTorque() {
|
|||
// Reset the split velocities of the bodies
|
||||
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.mSplitAngularVelocities[i].setToZero();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user