4 using System.Collections.Generic;
5 using SiliconStudio.Core.Collections;
6 using SiliconStudio.Core.Mathematics;
7 using SiliconStudio.Paradox.Effects.Modules;
8 using SiliconStudio.Paradox.Engine;
10 namespace SiliconStudio.
Paradox.Effects
18 = {
new ModelNodeDefinition { Name =
"Root", ParentIndex = -1, Transform = { Scaling = Vector3.One },
Flags = ModelNodeFlags.Default } };
30 get {
return nodeTransformations; }
63 if (nodeTransformations == null || nodeTransformations.Length <
this.nodes.Length)
66 for (
int index = 0; index < nodes.Length; index++)
68 nodeTransformations[index].ParentIndex = nodes[index].ParentIndex;
69 nodeTransformations[index].Transform = nodes[index].Transform;
70 nodeTransformations[index].Flags = nodes[index].Flags;
71 nodeTransformations[index].RenderingEnabledRecursive =
true;
80 var nodesLocal = nodes;
81 for (
int index = 0; index < nodesLocal.Length; index++)
83 nodeTransformations[index].Transform = nodesLocal[index].Transform;
93 var nodesLength = nodes.Length;
94 for (
int index = 0; index < nodesLength; index++)
96 UpdateNode(ref nodeTransformations[index]);
106 var nodeTransformationsLocal = this.nodeTransformations;
109 foreach (var meshes
in renderModel.RenderMeshes)
114 foreach (var renderMesh
in meshes)
116 var enabled = nodeTransformationsLocal[renderMesh.Mesh.NodeIndex].RenderingEnabledRecursive;
117 renderMesh.Enabled = enabled;
120 renderMesh.Mesh.Parameters.Set(TransformationKeys.World, nodeTransformationsLocal[renderMesh.Mesh.NodeIndex].WorldMatrix);
128 matrix = nodeTransformations[index].WorldMatrix;
133 matrix = nodeTransformations[index].LocalMatrix;
141 TransformationComponent.CreateMatrixTRS(ref node.Transform.Translation, ref node.Transform.Rotation, ref node.Transform.Scaling, out node.LocalMatrix);
144 var nodeTransformationsLocal = this.nodeTransformations;
146 var parentIndex = node.ParentIndex;
149 bool renderingEnabledRecursive = (node.Flags & ModelNodeFlags.EnableRender) ==
ModelNodeFlags.EnableRender;
150 if (parentIndex != -1)
151 renderingEnabledRecursive &= nodeTransformationsLocal[parentIndex].RenderingEnabledRecursive;
153 node.RenderingEnabledRecursive = renderingEnabledRecursive;
155 if (renderingEnabledRecursive)
158 if (parentIndex != -1)
159 Matrix.Multiply(ref node.LocalMatrix, ref nodeTransformationsLocal[parentIndex].WorldMatrix, out node.WorldMatrix);
161 node.WorldMatrix = node.LocalMatrix;
ModelViewHierarchyUpdater(ModelNodeDefinition[] nodes)
Initializes a new instance of the ModelViewHierarchyUpdater class.
void Initialize(Model model)
ModelNodeDefinition[] Nodes
The nodes in this hierarchy.
Flags
Enumeration of the new Assimp's flags.
void UpdateMatrices()
For each node, updates the world matrices from local matrices.
ModelViewHierarchyUpdater(Model model)
Initializes a new instance of the ModelViewHierarchyUpdater class.
void GetLocalMatrix(int index, out Matrix matrix)
Instantiation of a Model through a RenderPipeline.
Performs hierarchical updates for a given Model.
Describes a single transformation node, usually in a Model node hierarchy.
void UpdateToRenderModel(RenderModel renderModel)
Updates previously computed world matrices to TransformationKeys.World for each Mesh.
void Initialize(ModelNodeDefinition[] nodes)
ModelNodeFlags
Flags describing state of a ModelNodeDefinition.
void ResetInitialValues()
Resets initial values.
void GetWorldMatrix(int index, out Matrix matrix)
ModelViewHierarchyDefinition Hierarchy
Gets or sets the hierarchy definition, which describes nodes name, default transformation and hierarc...
Collection of Mesh, each one usually being a different LOD of the same Model. The effect system will ...
Represents a 4x4 mathematical matrix.