Explorar o código

Fixed up render transform handling for SceneGroups

JeffR hai 10 meses
pai
achega
75fb6683f5
Modificáronse 1 ficheiros con 10 adicións e 11 borrados
  1. 10 11
      Engine/source/T3D/SceneGroup.cpp

+ 10 - 11
Engine/source/T3D/SceneGroup.cpp

@@ -192,31 +192,30 @@ void SceneGroup::setTransform(const MatrixF& mat)
 
 void SceneGroup::setRenderTransform(const MatrixF& mat)
 {
+   MatrixF newTransform = mat;
+   Parent::setRenderTransform(mat);
+
    // Update all child transforms
    for (SimSetIterator itr(this); *itr; ++itr)
    {
       SceneObject* child = dynamic_cast<SceneObject*>(*itr);
       if (child)
       {
-         // Get the child's current world transform
-         MatrixF childWorldTrans = child->getRenderTransform();
-
-         MatrixF childLocalTrans;
-         childLocalTrans = mWorldToObj.mul(childWorldTrans);
+         MatrixF childOffset = child->getRenderTransform();
+         childOffset.mulL(newTransform.inverse());
 
-         MatrixF updatedTrans;
-         updatedTrans.mul(mat, childLocalTrans);
+         // Calculate the child's new transform
+         MatrixF newChildTransform = childOffset;
+         newChildTransform.mulL(newTransform);
 
-         // Set the child's new world transform
-         child->setRenderTransform(updatedTrans);
+         // Apply the new transform to the child
+         child->setRenderTransform(newChildTransform);
 
          PhysicsShape* childPS = dynamic_cast<PhysicsShape*>(child);
          if (childPS)
             childPS->storeRestorePos();
       }
    }
-
-   Parent::setRenderTransform(mat);
 }
 
 void SceneGroup::addObject(SimObject* object)