| 565 | } |
| 566 | |
| 567 | void TSShapeLoader::generateDefaultStates() |
| 568 | { |
| 569 | // Generate default object states (includes initial geometry) |
| 570 | for (S32 iObject = 0; iObject < shape->objects.size(); iObject++) |
| 571 | { |
| 572 | updateProgress(Load_GenerateDefaultStates, "Generating initial mesh and node states...", |
| 573 | shape->objects.size(), iObject); |
| 574 | |
| 575 | TSShape::Object& obj = shape->objects[iObject]; |
| 576 | |
| 577 | // Calculate the objectOffset for each mesh at T=0 |
| 578 | for (S32 iMesh = 0; iMesh < obj.numMeshes; iMesh++) |
| 579 | { |
| 580 | AppMesh* appMesh = appMeshes[obj.startMeshIndex + iMesh]; |
| 581 | AppNode* appNode = obj.nodeIndex >= 0 ? appNodes[obj.nodeIndex] : boundsNode; |
| 582 | |
| 583 | MatrixF meshMat(appMesh->getMeshTransform(DefaultTime)); |
| 584 | MatrixF nodeMat(appMesh->isSkin() ? meshMat : appNode->getNodeTransform(DefaultTime)); |
| 585 | |
| 586 | zapScale(nodeMat); |
| 587 | |
| 588 | appMesh->objectOffset = nodeMat.inverse() * meshMat; |
| 589 | } |
| 590 | |
| 591 | generateObjectState(shape->objects[iObject], DefaultTime, true, true); |
| 592 | } |
| 593 | |
| 594 | // Generate default node transforms |
| 595 | for (S32 iNode = 0; iNode < appNodes.size(); iNode++) |
| 596 | { |
| 597 | // Determine the default translation and rotation for the node |
| 598 | QuatF rot, srot; |
| 599 | Point3F trans, scale; |
| 600 | generateNodeTransform(appNodes[iNode], DefaultTime, false, 0, rot, trans, srot, scale); |
| 601 | |
| 602 | // Add default node translation and rotation |
| 603 | addNodeRotation(rot, true); |
| 604 | addNodeTranslation(trans, true); |
| 605 | } |
| 606 | } |
| 607 | |
| 608 | void TSShapeLoader::generateObjectState(TSShape::Object& obj, F32 t, bool addFrame, bool addMatFrame) |
| 609 | { |
nothing calls this directly
no test coverage detected