private Matrix4 CalculateWorldMatrix(RenderModelNodeBlock nodeBlock) { if (!(( RenderModelBlock )Model.RenderModel.Get(_key)).Nodes.Contains(nodeBlock)) { throw new ArgumentOutOfRangeException( ); } return(Nodes.GetWorldMatrix(nodeBlock)); }
public static void SetWorldMatrix(this IList <RenderModelNodeBlock> list, RenderModelNodeBlock node, Matrix4 value) { if (!list.Contains(node)) { throw new ArgumentOutOfRangeException(); } var matrix = node.ParentNode < 0 ? value : value *list.GetWorldMatrix(list[node.ParentNode]).Inverted(); node.WorldMatrix = matrix; }
public static Matrix4 GetWorldMatrix(this IList <RenderModelNodeBlock> list, RenderModelNodeBlock node) { if (!list.Contains(node)) { throw new ArgumentOutOfRangeException(); } var worldMatrix = node.WorldMatrix; if (node.ParentNode < 0) { return(worldMatrix); } return(worldMatrix * list.GetWorldMatrix(list[node.ParentNode])); }
public static Matrix4 GetInverseBindPoseTransfrom(this IList <RenderModelNodeBlock> list, RenderModelNodeBlock node) { if (!list.Contains(node)) { throw new ArgumentOutOfRangeException(); } var inverseBindPoseTransfrom = node.CalculateInverseBindTransform(); if (node.ParentNode < 0) { return(inverseBindPoseTransfrom); } return(list.GetInverseBindPoseTransfrom(list[node.ParentNode]) * inverseBindPoseTransfrom); }
private void SetWorldMatrix(RenderModelNodeBlock nodeBlock, Matrix4 value) { Nodes.SetWorldMatrix(nodeBlock, value); }