Browse Source

Renamed some classes to a more meaningful name, and some cleanup.

Vicente Penades 6 years ago
parent
commit
14529f192e

+ 2 - 2
examples/SharpGLTF.Runtime.MonoGame/MonoGameModelInstance.cs

@@ -58,7 +58,7 @@ namespace SharpGLTF.Runtime
 
         private void Draw(ModelMesh mesh, Matrix projectionXform, Matrix viewXform, Matrix worldXform, Transforms.IGeometryTransform modelXform)
         {
-            if (modelXform is Transforms.SkinTransform skinXform)
+            if (modelXform is Transforms.SkinnedTransform skinXform)
             {
                 var skinTransforms = skinXform.SkinMatrices.Select(item => item.ToXna()).ToArray();
 
@@ -68,7 +68,7 @@ namespace SharpGLTF.Runtime
                 }
             }
 
-            if (modelXform is Transforms.StaticTransform statXform)
+            if (modelXform is Transforms.RigidTransform statXform)
             {
                 var statTransform = statXform.WorldMatrix.ToXna();
 

+ 2 - 2
examples/SharpGLTF.Runtime.MonoGame/MonoGameModelTemplate.cs

@@ -113,9 +113,9 @@ namespace SharpGLTF.Runtime
             {
                 var b = _Meshes[d.Item1].BoundingSphere;
 
-                if (d.Item2 is Transforms.StaticTransform statXform) b = b.Transform(statXform.WorldMatrix.ToXna());
+                if (d.Item2 is Transforms.RigidTransform statXform) b = b.Transform(statXform.WorldMatrix.ToXna());
 
-                if (d.Item2 is Transforms.SkinTransform skinXform)
+                if (d.Item2 is Transforms.SkinnedTransform skinXform)
                 {
                     // this is a bit agressive and probably over-reaching, but with skins you never know the actual bounds
                     // unless you calculate the bounds frame by frame.

+ 11 - 11
src/SharpGLTF.Core/Runtime/SceneTemplate.cs

@@ -209,13 +209,13 @@ namespace SharpGLTF.Runtime
     }
 
     /// <summary>
-    /// Defines a reference to a drawable static mesh
+    /// Defines a reference to a drawable rigid mesh
     /// </summary>
-    sealed class StaticDrawableReference : DrawableReference
+    sealed class RigidDrawableReference : DrawableReference
     {
         #region lifecycle
 
-        internal StaticDrawableReference(Schema2.Node node, Func<Schema2.Node, int> indexFunc)
+        internal RigidDrawableReference(Schema2.Node node, Func<Schema2.Node, int> indexFunc)
             : base(node)
         {
             _NodeIndex = indexFunc(node);
@@ -231,13 +231,13 @@ namespace SharpGLTF.Runtime
 
         #region API
 
-        public override Transforms.IGeometryTransform CreateGeometryTransform() { return new Transforms.StaticTransform(); }
+        public override Transforms.IGeometryTransform CreateGeometryTransform() { return new Transforms.RigidTransform(); }
 
-        public override void UpdateGeometryTransform(Transforms.IGeometryTransform geoxform, IReadOnlyList<NodeInstance> instances)
+        public override void UpdateGeometryTransform(Transforms.IGeometryTransform rigidTransform, IReadOnlyList<NodeInstance> instances)
         {
             var node = instances[_NodeIndex];
 
-            var statxform = (Transforms.StaticTransform)geoxform;
+            var statxform = (Transforms.RigidTransform)rigidTransform;
             statxform.Update(node.WorldMatrix);
             statxform.Update(node.MorphWeights, false);
         }
@@ -260,7 +260,7 @@ namespace SharpGLTF.Runtime
             _MorphNodeIndex = indexFunc(node);
 
             _JointsNodeIndices = new int[skin.JointsCount];
-            _BindMatrices = new System.Numerics.Matrix4x4[skin.JointsCount];
+            _BindMatrices = new Matrix4x4[skin.JointsCount];
 
             for (int i = 0; i < _JointsNodeIndices.Length; ++i)
             {
@@ -283,11 +283,11 @@ namespace SharpGLTF.Runtime
 
         #region API
 
-        public override Transforms.IGeometryTransform CreateGeometryTransform() { return new Transforms.SkinTransform(); }
+        public override Transforms.IGeometryTransform CreateGeometryTransform() { return new Transforms.SkinnedTransform(); }
 
-        public override void UpdateGeometryTransform(Transforms.IGeometryTransform geoxform, IReadOnlyList<NodeInstance> instances)
+        public override void UpdateGeometryTransform(Transforms.IGeometryTransform skinnedTransform, IReadOnlyList<NodeInstance> instances)
         {
-            var skinxform = (Transforms.SkinTransform)geoxform;
+            var skinxform = (Transforms.SkinnedTransform)skinnedTransform;
             skinxform.Update(_JointsNodeIndices.Length, idx => _BindMatrices[idx], idx => instances[_JointsNodeIndices[idx]].WorldMatrix);
             skinxform.Update(instances[_MorphNodeIndex].MorphWeights, false);
         }
@@ -361,7 +361,7 @@ namespace SharpGLTF.Runtime
                     ?
                     (DrawableReference)new SkinnedDrawableReference(srcInstance, indexSolver)
                     :
-                    (DrawableReference)new StaticDrawableReference(srcInstance, indexSolver);
+                    (DrawableReference)new RigidDrawableReference(srcInstance, indexSolver);
             }
 
             // gather animation durations.

+ 1 - 1
src/SharpGLTF.Core/Schema2/gltf.Skin.cs

@@ -104,7 +104,7 @@ namespace SharpGLTF.Schema2
             {
                 Guard.NotNull(joints[i], nameof(joints));
 
-                var xform = Transforms.SkinTransform.CalculateInverseBinding(meshBindTransform, joints[i].WorldMatrix);
+                var xform = Transforms.SkinnedTransform.CalculateInverseBinding(meshBindTransform, joints[i].WorldMatrix);
 
                 pairs[i] = (joints[i], xform);
             }

+ 8 - 8
src/SharpGLTF.Core/Transforms/MeshTransforms.cs

@@ -167,22 +167,22 @@ namespace SharpGLTF.Transforms
         #endregion
     }
 
-    public class StaticTransform : MorphTransform, IGeometryTransform
+    public class RigidTransform : MorphTransform, IGeometryTransform
     {
         #region constructor
 
-        public StaticTransform()
+        public RigidTransform()
         {
             Update(TRANSFORM.Identity);
         }
 
-        public StaticTransform(TRANSFORM worldMatrix)
+        public RigidTransform(TRANSFORM worldMatrix)
         {
             Update(default, false);
             Update(worldMatrix);
         }
 
-        public StaticTransform(TRANSFORM worldMatrix, SparseWeight8 morphWeights, bool useAbsoluteMorphs)
+        public RigidTransform(TRANSFORM worldMatrix, SparseWeight8 morphWeights, bool useAbsoluteMorphs)
         {
             Update(morphWeights, useAbsoluteMorphs);
             Update(worldMatrix);
@@ -254,19 +254,19 @@ namespace SharpGLTF.Transforms
         #endregion
     }
 
-    public class SkinTransform : MorphTransform, IGeometryTransform
+    public class SkinnedTransform : MorphTransform, IGeometryTransform
     {
         #region constructor
 
-        public SkinTransform() { }
+        public SkinnedTransform() { }
 
-        public SkinTransform(TRANSFORM[] invBindMatrix, TRANSFORM[] currWorldMatrix, SparseWeight8 morphWeights, bool useAbsoluteMorphTargets)
+        public SkinnedTransform(TRANSFORM[] invBindMatrix, TRANSFORM[] currWorldMatrix, SparseWeight8 morphWeights, bool useAbsoluteMorphTargets)
         {
             Update(morphWeights, useAbsoluteMorphTargets);
             Update(invBindMatrix, currWorldMatrix);
         }
 
-        public SkinTransform(int count, Func<int, TRANSFORM> invBindMatrix, Func<int, TRANSFORM> currWorldMatrix, SparseWeight8 morphWeights, bool useAbsoluteMorphTargets)
+        public SkinnedTransform(int count, Func<int, TRANSFORM> invBindMatrix, Func<int, TRANSFORM> currWorldMatrix, SparseWeight8 morphWeights, bool useAbsoluteMorphTargets)
         {
             Update(morphWeights, useAbsoluteMorphTargets);
             Update(count, invBindMatrix, currWorldMatrix);

+ 2 - 2
src/SharpGLTF.Toolkit/Scenes/InstanceBuilder.cs

@@ -15,11 +15,11 @@ namespace SharpGLTF.Scenes
             _Parent = parent;
         }
 
-        internal InstanceBuilder Clone(SceneBuilder newParent)
+        internal InstanceBuilder DeepClone(SceneBuilder newParent)
         {
             var clone = new InstanceBuilder(newParent);
             clone._Name = this.Name;
-            clone._ContentTransformer = this._ContentTransformer?.Clone();
+            clone._ContentTransformer = this._ContentTransformer?.DeepClone();
 
             return clone;
         }

+ 1 - 1
src/SharpGLTF.Toolkit/Scenes/SceneBuilder.Schema2.cs

@@ -83,7 +83,7 @@ namespace SharpGLTF.Scenes
 
             var armatures = srcScenes
                 .SelectMany(item => item.Instances)
-                .Select(item => item.Content?.GetArmatureAsset())
+                .Select(item => item.Content?.GetArmatureRoot())
                 .Where(item => item != null)
                 .Select(item => item.Root)
                 .Distinct()

+ 21 - 21
src/SharpGLTF.Toolkit/Scenes/SceneBuilder.cs

@@ -19,12 +19,12 @@ namespace SharpGLTF.Scenes
             _Name = name;
         }
 
-        public SceneBuilder Clone()
+        public SceneBuilder DeepClone()
         {
             var clone = new SceneBuilder();
-            clone._Name = this._Name;
 
-            clone._Instances.AddRange(this._Instances.Select(item => item.Clone(this)));
+            clone._Name = this._Name;
+            clone._Instances.AddRange(this._Instances.Select(item => item.DeepClone(this)));
 
             return clone;
         }
@@ -55,10 +55,10 @@ namespace SharpGLTF.Scenes
 
         #region API
 
-        public InstanceBuilder AddMesh(MESHBUILDER mesh, Matrix4x4 transform)
+        public InstanceBuilder AddMesh(MESHBUILDER mesh, Matrix4x4 meshWorldMatrix)
         {
             var instance = new InstanceBuilder(this);
-            instance.Content = new StaticTransformer(mesh, transform);
+            instance.Content = new FixedTransformer(mesh, meshWorldMatrix);
 
             _Instances.Add(instance);
 
@@ -68,7 +68,7 @@ namespace SharpGLTF.Scenes
         public InstanceBuilder AddMesh(MESHBUILDER mesh, NodeBuilder node)
         {
             var instance = new InstanceBuilder(this);
-            instance.Content = new NodeTransformer(mesh, node);
+            instance.Content = new RigidTransformer(mesh, node);
 
             _Instances.Add(instance);
 
@@ -78,7 +78,7 @@ namespace SharpGLTF.Scenes
         public InstanceBuilder AddSkinnedMesh(MESHBUILDER mesh, Matrix4x4 meshWorldMatrix, params NodeBuilder[] joints)
         {
             var instance = new InstanceBuilder(this);
-            instance.Content = new SkinTransformer(mesh, meshWorldMatrix, joints);
+            instance.Content = new SkinnedTransformer(mesh, meshWorldMatrix, joints);
 
             _Instances.Add(instance);
 
@@ -88,7 +88,7 @@ namespace SharpGLTF.Scenes
         public InstanceBuilder AddSkinnedMesh(MESHBUILDER mesh, params (NodeBuilder Joint, Matrix4x4 InverseBindMatrix)[] joints)
         {
             var instance = new InstanceBuilder(this);
-            instance.Content = new SkinTransformer(mesh, joints);
+            instance.Content = new SkinnedTransformer(mesh, joints);
 
             _Instances.Add(instance);
 
@@ -99,40 +99,40 @@ namespace SharpGLTF.Scenes
         {
             var content = new CameraContent(camera);
             var instance = new InstanceBuilder(this);
-            instance.Content = new NodeTransformer(content, node);
+            instance.Content = new RigidTransformer(content, node);
             _Instances.Add(instance);
             return instance;
         }
 
+        public InstanceBuilder AddCamera(CameraBuilder camera, Vector3 cameraPosition, Vector3 targetPosition)
+        {
+            var xform = Matrix4x4.CreateWorld(cameraPosition, Vector3.Normalize(targetPosition - cameraPosition), Vector3.UnitY);
+            return AddCamera(camera, xform);
+        }
+
         public InstanceBuilder AddCamera(CameraBuilder camera, Matrix4x4 cameraWorldMatrix)
         {
             var content = new CameraContent(camera);
             var instance = new InstanceBuilder(this);
-            instance.Content = new StaticTransformer(content, cameraWorldMatrix);
+            instance.Content = new FixedTransformer(content, cameraWorldMatrix);
             _Instances.Add(instance);
             return instance;
         }
 
-        public InstanceBuilder AddCamera(CameraBuilder camera, Vector3 position, Vector3 lookat)
-        {
-            var xform = Matrix4x4.CreateWorld(position, Vector3.Normalize(lookat - position), Vector3.UnitY);
-            return AddCamera(camera, xform);
-        }
-
-        public InstanceBuilder AddLight(LightBuilder light, NodeBuilder node)
+        public InstanceBuilder AddLight(LightBuilder light, Matrix4x4 lightWorldMatrix)
         {
             var content = new LightContent(light);
             var instance = new InstanceBuilder(this);
-            instance.Content = new NodeTransformer(content, node);
+            instance.Content = new FixedTransformer(content, lightWorldMatrix);
             _Instances.Add(instance);
             return instance;
         }
 
-        public InstanceBuilder AddLight(LightBuilder light, Matrix4x4 lightWorldMatrix)
+        public InstanceBuilder AddLight(LightBuilder light, NodeBuilder node)
         {
             var content = new LightContent(light);
             var instance = new InstanceBuilder(this);
-            instance.Content = new StaticTransformer(content, lightWorldMatrix);
+            instance.Content = new RigidTransformer(content, node);
             _Instances.Add(instance);
             return instance;
         }
@@ -140,7 +140,7 @@ namespace SharpGLTF.Scenes
         public void RenameAllNodes(string namePrefix)
         {
             var allNodes = Instances
-                .Select(item => item.Content.GetArmatureAsset())
+                .Select(item => item.Content.GetArmatureRoot())
                 .Where(item => item != null)
                 .SelectMany(item => NodeBuilder.Flatten(item))
                 .Distinct()

+ 3 - 3
src/SharpGLTF.Toolkit/Scenes/Transformers.Schema2.cs

@@ -10,7 +10,7 @@ using SCHEMA2SCENE = SharpGLTF.Scenes.Schema2SceneBuilder.IOperator<SharpGLTF.Sc
 
 namespace SharpGLTF.Scenes
 {
-    partial class StaticTransformer : SCHEMA2SCENE
+    partial class FixedTransformer : SCHEMA2SCENE
     {
         void SCHEMA2SCENE.Setup(Scene dstScene, Schema2SceneBuilder context)
         {
@@ -26,7 +26,7 @@ namespace SharpGLTF.Scenes
         }
     }
 
-    partial class NodeTransformer : SCHEMA2SCENE
+    partial class RigidTransformer : SCHEMA2SCENE
     {
         void SCHEMA2SCENE.Setup(Scene dstScene, Schema2SceneBuilder context)
         {
@@ -40,7 +40,7 @@ namespace SharpGLTF.Scenes
         }
     }
 
-    partial class SkinTransformer : SCHEMA2SCENE
+    partial class SkinnedTransformer : SCHEMA2SCENE
     {
         void SCHEMA2SCENE.Setup(Scene dstScene, Schema2SceneBuilder context)
         {

+ 39 - 46
src/SharpGLTF.Toolkit/Scenes/Transformers.cs

@@ -8,7 +8,7 @@ using MESHBUILDER = SharpGLTF.Geometry.IMeshBuilder<SharpGLTF.Materials.Material
 namespace SharpGLTF.Scenes
 {
     /// <summary>
-    /// Wraps a content object (usually a Mesh, a Camera or a light)
+    /// Applies a transform to the underlaying content object (usually a Mesh, a Camera or a light)
     /// </summary>
     public abstract class ContentTransformer
     {
@@ -18,17 +18,12 @@ namespace SharpGLTF.Scenes
         {
             Guard.NotNull(content, nameof(content));
 
-            _Content = content;
-        }
+            if (content is MESHBUILDER mesh) content = new MeshContent(mesh);
 
-        protected ContentTransformer(MESHBUILDER mesh)
-        {
-            Guard.NotNull(mesh, nameof(mesh));
-
-            _Content = new MeshContent(mesh);
+            _Content = content;
         }
 
-        public abstract ContentTransformer Clone();
+        public abstract ContentTransformer DeepClone();
 
         protected ContentTransformer(ContentTransformer other)
         {
@@ -42,7 +37,7 @@ namespace SharpGLTF.Scenes
 
         private Object _Content;
 
-        private Animations.AnimatableProperty<Transforms.SparseWeight8> _Morphings; // maybe it should be moved to transformers!!
+        private Animations.AnimatableProperty<Transforms.SparseWeight8> _Morphings;
 
         #endregion
 
@@ -56,9 +51,17 @@ namespace SharpGLTF.Scenes
 
         #region API
 
+        /// <summary>
+        /// If this <see cref="ContentTransformer"/> contains a <see cref="MESHBUILDER"/>.
+        /// </summary>
+        /// <returns>A <see cref="MESHBUILDER"/> instance, or NULL.</returns>
         public virtual MESHBUILDER GetGeometryAsset() { return (_Content as IRenderableContent)?.GetGeometryAsset(); }
 
-        public abstract NodeBuilder GetArmatureAsset();
+        /// <summary>
+        /// If this <see cref="ContentTransformer"/> uses a <see cref="NodeBuilder"/> armature, it returns the root of the armature.
+        /// </summary>
+        /// <returns>A <see cref="NodeBuilder"/> instance, or NULL.</returns>
+        public abstract NodeBuilder GetArmatureRoot();
 
         public Animations.AnimatableProperty<Transforms.SparseWeight8> UseMorphing()
         {
@@ -80,32 +83,27 @@ namespace SharpGLTF.Scenes
     }
 
     /// <summary>
-    /// Applies a static transform to the underlaying content.
+    /// Applies a fixed <see cref="Matrix4x4"/> transform to the underlaying content.
     /// </summary>
-    public partial class StaticTransformer : ContentTransformer
+    public partial class FixedTransformer : ContentTransformer
     {
         #region lifecycle
 
-        public StaticTransformer(Object content, Matrix4x4 xform)
+        internal FixedTransformer(Object content, Matrix4x4 xform)
             : base(content)
         {
             _WorldTransform = xform;
         }
 
-        public StaticTransformer(MESHBUILDER mesh, Matrix4x4 xform)
-            : base(mesh)
-        {
-            _WorldTransform = xform;
-        }
-
-        protected StaticTransformer(StaticTransformer other) : base(other)
+        protected FixedTransformer(FixedTransformer other)
+            : base(other)
         {
             this._WorldTransform = other._WorldTransform;
         }
 
-        public override ContentTransformer Clone()
+        public override ContentTransformer DeepClone()
         {
-            return new StaticTransformer(this);
+            return new FixedTransformer(this);
         }
 
         #endregion
@@ -128,38 +126,33 @@ namespace SharpGLTF.Scenes
 
         #region API
 
-        public override NodeBuilder GetArmatureAsset() { return null; }
+        public override NodeBuilder GetArmatureRoot() { return null; }
 
         #endregion
     }
 
     /// <summary>
-    /// Applies the transform of a <see cref="NodeBuilder"/> to the underlaying content.
+    /// Applies the transform of a single <see cref="NodeBuilder"/> to the underlaying content.
     /// </summary>
-    public partial class NodeTransformer : ContentTransformer
+    public partial class RigidTransformer : ContentTransformer
     {
         #region lifecycle
 
-        public NodeTransformer(Object content, NodeBuilder node)
+        internal RigidTransformer(Object content, NodeBuilder node)
             : base(content)
         {
             _Node = node;
         }
 
-        public NodeTransformer(MESHBUILDER mesh, NodeBuilder node)
-            : base(mesh)
-        {
-            _Node = node;
-        }
-
-        protected NodeTransformer(NodeTransformer other) : base(other)
+        protected RigidTransformer(RigidTransformer other)
+            : base(other)
         {
             this._Node = other._Node;
         }
 
-        public override ContentTransformer Clone()
+        public override ContentTransformer DeepClone()
         {
-            return new NodeTransformer(this);
+            return new RigidTransformer(this);
         }
 
         #endregion
@@ -182,7 +175,7 @@ namespace SharpGLTF.Scenes
 
         #region API
 
-        public override NodeBuilder GetArmatureAsset() { return _Node.Root; }
+        public override NodeBuilder GetArmatureRoot() { return _Node.Root; }
 
         #endregion
     }
@@ -190,32 +183,32 @@ namespace SharpGLTF.Scenes
     /// <summary>
     /// Applies the transforms of many <see cref="NodeBuilder"/> to the underlaying content.
     /// </summary>
-    public partial class SkinTransformer : ContentTransformer
+    public partial class SkinnedTransformer : ContentTransformer
     {
         #region lifecycle
 
-        public SkinTransformer(MESHBUILDER mesh, Matrix4x4 meshWorldMatrix, NodeBuilder[] joints)
+        internal SkinnedTransformer(MESHBUILDER mesh, Matrix4x4 meshWorldMatrix, NodeBuilder[] joints)
             : base(mesh)
         {
             SetJoints(meshWorldMatrix, joints);
         }
 
-        public SkinTransformer(MESHBUILDER mesh, (NodeBuilder Joint, Matrix4x4 InverseBindMatrix)[] joints)
+        internal SkinnedTransformer(MESHBUILDER mesh, (NodeBuilder Joint, Matrix4x4 InverseBindMatrix)[] joints)
             : base(mesh)
         {
             SetJoints(joints);
         }
 
-        protected SkinTransformer(SkinTransformer other)
+        protected SkinnedTransformer(SkinnedTransformer other)
             : base(other)
         {
             this._TargetBindMatrix = other._TargetBindMatrix;
             this._Joints.AddRange(other._Joints);
         }
 
-        public override ContentTransformer Clone()
+        public override ContentTransformer DeepClone()
         {
-            return new SkinTransformer(this);
+            return new SkinnedTransformer(this);
         }
 
         #endregion
@@ -258,7 +251,7 @@ namespace SharpGLTF.Scenes
             for (int i = 0; i < jb.Length; ++i)
             {
                 var j = _Joints[i].Joints;
-                var m = _Joints[i].InverseBindMatrix ?? Transforms.SkinTransform.CalculateInverseBinding(_TargetBindMatrix ?? Matrix4x4.Identity, j.WorldMatrix);
+                var m = _Joints[i].InverseBindMatrix ?? Transforms.SkinnedTransform.CalculateInverseBinding(_TargetBindMatrix ?? Matrix4x4.Identity, j.WorldMatrix);
 
                 jb[i] = (j, m);
             }
@@ -266,7 +259,7 @@ namespace SharpGLTF.Scenes
             return jb;
         }
 
-        public override NodeBuilder GetArmatureAsset()
+        public override NodeBuilder GetArmatureRoot()
         {
             return _Joints
                 .Select(item => item.Joints.Root)
@@ -278,7 +271,7 @@ namespace SharpGLTF.Scenes
         {
             var jb = GetJointBindings();
 
-            return new Transforms.SkinTransform
+            return new Transforms.SkinnedTransform
                 (
                 jb.Length,
                 idx => jb[idx].InverseBindMatrix,

+ 1 - 1
tests/SharpGLTF.Tests/Transforms/InverseBindMatrixTest.cs

@@ -21,7 +21,7 @@ namespace SharpGLTF.Transforms
             var joint = Matrix4x4.CreateFromYawPitchRoll(jx, jy, jz);
             joint.Translation = new Vector3(jx, jy, jz);
 
-            var invBindMatrix = SkinTransform.CalculateInverseBinding(model, joint);
+            var invBindMatrix = SkinnedTransform.CalculateInverseBinding(model, joint);
 
             Matrix4x4.Invert(model, out Matrix4x4 xform);            
             Matrix4x4.Invert(joint * xform, out Matrix4x4 result);