MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / getTransform

Method getTransform

Engine/source/ts/collada/colladaAppNode.cpp:214–263  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

212}
213
214MatrixF ColladaAppNode::getTransform(F32 time)
215{
216 // Check if we can use the last computed transform
217 if (time == lastTransformTime)
218 return lastTransform;
219
220 if (appParent) {
221 // Get parent node's transform
222 lastTransform = appParent->getTransform(time);
223 }
224 else {
225 // no parent (ie. root level) => scale by global shape <unit>
226 lastTransform.identity();
227 lastTransform.scale(ColladaUtils::getOptions().unit);
228 if (!isBounds())
229 ColladaUtils::convertTransform(lastTransform); // don't convert bounds node transform (or upAxis won't work!)
230 }
231
232 // Multiply by local node transform elements
233 for (S32 iTxfm = 0; iTxfm < nodeTransforms.size(); iTxfm++) {
234
235 MatrixF mat(true);
236
237 // Convert the transform element to a MatrixF
238 switch (nodeTransforms[iTxfm].element->getElementType()) {
239 case COLLADA_TYPE::TRANSLATE: mat = vecToMatrixF<domTranslate>(nodeTransforms[iTxfm].getValue(time)); break;
240 case COLLADA_TYPE::SCALE: mat = vecToMatrixF<domScale>(nodeTransforms[iTxfm].getValue(time)); break;
241 case COLLADA_TYPE::ROTATE: mat = vecToMatrixF<domRotate>(nodeTransforms[iTxfm].getValue(time)); break;
242 case COLLADA_TYPE::MATRIX: mat = vecToMatrixF<domMatrix>(nodeTransforms[iTxfm].getValue(time)); break;
243 case COLLADA_TYPE::SKEW: mat = vecToMatrixF<domSkew>(nodeTransforms[iTxfm].getValue(time)); break;
244 case COLLADA_TYPE::LOOKAT: mat = vecToMatrixF<domLookat>(nodeTransforms[iTxfm].getValue(time)); break;
245 }
246
247 // Remove node scaling (but keep reflections) if desired
248 if (ColladaUtils::getOptions().ignoreNodeScale)
249 {
250 Point3F invScale = mat.getScale();
251 invScale.x = invScale.x ? (1.0f / invScale.x) : 0;
252 invScale.y = invScale.y ? (1.0f / invScale.y) : 0;
253 invScale.z = invScale.z ? (1.0f / invScale.z) : 0;
254 mat.scale(invScale);
255 }
256
257 // Post multiply the animated transform
258 lastTransform.mul(mat);
259 }
260
261 lastTransformTime = time;
262 return lastTransform;
263}

Callers 1

colladaLights.cppFile · 0.45

Calls 7

identityMethod · 0.45
scaleMethod · 0.45
sizeMethod · 0.45
getElementTypeMethod · 0.45
getValueMethod · 0.45
getScaleMethod · 0.45
mulMethod · 0.45

Tested by

no test coverage detected