/// <summary> /// Updates the node transforms /// </summary> private void IterateUpdate(RiggedModelNode node) { if (node.parent != null) { node.CombinedTransformMg = node.LocalTransformMg * node.parent.CombinedTransformMg; } else { node.CombinedTransformMg = node.LocalTransformMg; } //// humm little test //if (node.name == "Armature") // node.CombinedTransformMg = Matrix.Identity; // set to the final shader matrix. if (node.isThisARealBone) { globalShaderMatrixs[node.boneShaderFinalTransformIndex] = node.OffsetMatrixMg * node.CombinedTransformMg; } // call children foreach (RiggedModelNode n in node.children) { IterateUpdate(n); } }
/// <summary> /// Convienience method pass the node let it set itself. /// This also allows you to call this is in a iterated node tree and just bypass setting non bone nodes. /// </summary> public void SetGlobalShaderBoneNode(RiggedModelNode n) { if (n.isThisARealBone) { globalShaderMatrixs[n.boneShaderFinalTransformIndex] = n.CombinedTransformMg; } }