| 64 | // Shape utility functions |
| 65 | |
| 66 | MatrixF TSShapeLoader::getLocalNodeMatrix(AppNode* node, F32 t) |
| 67 | { |
| 68 | MatrixF m1 = node->getNodeTransform(t); |
| 69 | |
| 70 | // multiply by inverse scale at t=0 |
| 71 | MatrixF m10 = node->getNodeTransform(DefaultTime); |
| 72 | m1.scale(Point3F(1.0f/m10.getScale().x, 1.0f/m10.getScale().y, 1.0f/m10.getScale().z)); |
| 73 | |
| 74 | if (node->mParentIndex >= 0) |
| 75 | { |
| 76 | AppNode *parent = appNodes[node->mParentIndex]; |
| 77 | |
| 78 | MatrixF m2 = parent->getNodeTransform(t); |
| 79 | |
| 80 | // multiply by inverse scale at t=0 |
| 81 | MatrixF m20 = parent->getNodeTransform(DefaultTime); |
| 82 | m2.scale(Point3F(1.0f/m20.getScale().x, 1.0f/m20.getScale().y, 1.0f/m20.getScale().z)); |
| 83 | |
| 84 | // get local transform by pre-multiplying by inverted parent transform |
| 85 | m1 = m2.inverse() * m1; |
| 86 | } |
| 87 | else if (boundsNode && node != boundsNode) |
| 88 | { |
| 89 | // make transform relative to bounds node transform at time=t |
| 90 | MatrixF mb = boundsNode->getNodeTransform(t); |
| 91 | zapScale(mb); |
| 92 | m1 = mb.inverse() * m1; |
| 93 | } |
| 94 | |
| 95 | return m1; |
| 96 | } |
| 97 | |
| 98 | void TSShapeLoader::generateNodeTransform(AppNode* node, F32 t, bool blend, F32 referenceTime, |
| 99 | QuatF& rot, Point3F& trans, QuatF& srot, Point3F& scale) |
nothing calls this directly
no test coverage detected