private void UpdateNode(ref ModelNodeTransformation node) { // Compute LocalMatrix if ((node.Flags & ModelNodeFlags.EnableTransform) == ModelNodeFlags.EnableTransform) { TransformComponent.CreateMatrixTRS(ref node.Transform.Translation, ref node.Transform.Rotation, ref node.Transform.Scaling, out node.LocalMatrix); } var nodeTransformationsLocal = this.nodeTransformations; var parentIndex = node.ParentIndex; // Update Enabled bool renderingEnabledRecursive = (node.Flags & ModelNodeFlags.EnableRender) == ModelNodeFlags.EnableRender; if (parentIndex != -1) { renderingEnabledRecursive &= nodeTransformationsLocal[parentIndex].RenderingEnabledRecursive; } node.RenderingEnabledRecursive = renderingEnabledRecursive; if (renderingEnabledRecursive) { // Compute WorldMatrix if (parentIndex != -1) { Matrix.Multiply(ref node.LocalMatrix, ref nodeTransformationsLocal[parentIndex].WorldMatrix, out node.WorldMatrix); } else { node.WorldMatrix = node.LocalMatrix; } } }
private void UpdateNode(ref ModelNodeTransformation node) { // Compute LocalMatrix if ((node.Flags & ModelNodeFlags.EnableTransform) == ModelNodeFlags.EnableTransform) { var scaling = node.Transform.Scaling; TransformComponent.CreateMatrixTRS(ref node.Transform.Translation, ref node.Transform.Rotation, ref scaling, out node.LocalMatrix); node.IsScalingNegative = scaling.X * scaling.Y * scaling.Z < 0.0f; } var nodeTransformationsLocal = this.nodeTransformations; var parentIndex = node.ParentIndex; // Update Enabled bool renderingEnabledRecursive = (node.Flags & ModelNodeFlags.EnableRender) == ModelNodeFlags.EnableRender; if (parentIndex != -1) renderingEnabledRecursive &= nodeTransformationsLocal[parentIndex].RenderingEnabledRecursive; node.RenderingEnabledRecursive = renderingEnabledRecursive; if (renderingEnabledRecursive) { // Compute WorldMatrix if (parentIndex != -1) { Matrix.Multiply(ref node.LocalMatrix, ref nodeTransformationsLocal[parentIndex].WorldMatrix, out node.WorldMatrix); if (nodeTransformationsLocal[parentIndex].IsScalingNegative) node.IsScalingNegative = !node.IsScalingNegative; } else node.WorldMatrix = node.LocalMatrix; } }