Răsfoiți Sursa

reshaping the skinning API...

Vicente Penades 6 ani în urmă
părinte
comite
a6e3143adf

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

@@ -137,7 +137,7 @@ namespace SharpGLTF.Transforms
 
             if (_AbsoluteMorphTargets)
             {
-                foreach (var pair in _Weights.GetPairs())
+                foreach (var pair in _Weights.GetSparseWeights())
                 {
                     var val = pair.Item1 == 0 ? value : morphTargets[pair.Item1 - 1];
                     p += val * pair.Item2;
@@ -145,7 +145,7 @@ namespace SharpGLTF.Transforms
             }
             else
             {
-                foreach (var pair in _Weights.GetPairs())
+                foreach (var pair in _Weights.GetSparseWeights())
                 {
                     var val = pair.Item1 == 0 ? value : value + morphTargets[pair.Item1 - 1];
                     p += val * pair.Item2;
@@ -165,7 +165,7 @@ namespace SharpGLTF.Transforms
 
             if (_AbsoluteMorphTargets)
             {
-                foreach (var pair in _Weights.GetPairs())
+                foreach (var pair in _Weights.GetSparseWeights())
                 {
                     var val = pair.Item1 == 0 ? value : morphTargets[pair.Item1 - 1];
                     p += val * pair.Item2;
@@ -173,7 +173,7 @@ namespace SharpGLTF.Transforms
             }
             else
             {
-                foreach (var pair in _Weights.GetPairs())
+                foreach (var pair in _Weights.GetSparseWeights())
                 {
                     var val = pair.Item1 == 0 ? value : value + morphTargets[pair.Item1 - 1];
                     p += val * pair.Item2;

+ 6 - 6
src/SharpGLTF.Core/Transforms/SparseWeight8.cs

@@ -311,7 +311,7 @@ namespace SharpGLTF.Transforms
 
         public bool ContainsKey(int key)
         {
-            return GetPairs().Select(item => item.Item1).Contains(key);
+            return GetSparseWeights().Select(item => item.Item1).Contains(key);
         }
 
         public bool TryGetValue(int key, out float value)
@@ -364,7 +364,7 @@ namespace SharpGLTF.Transforms
 
             for (int i = 0; i < 8; ++i)
             {
-                var pair = src.GetPair(i);
+                var pair = src.GetSparseWeight(i);
                 if (pair.Item2 == 0) continue;
                 var idx = dstIndices
                     .Slice(0, dstLength)
@@ -524,7 +524,7 @@ namespace SharpGLTF.Transforms
             }
         }
 
-        internal IEnumerable<(int, float)> GetPairs()
+        internal IEnumerable<(int, float)> GetSparseWeights()
         {
             if (Weight0 != 0) yield return (Index0, Weight0);
             if (Weight1 != 0) yield return (Index1, Weight1);
@@ -536,9 +536,9 @@ namespace SharpGLTF.Transforms
             if (Weight7 != 0) yield return (Index7, Weight7);
         }
 
-        private (int, float) GetPair(int idx)
+        private (int, float) GetSparseWeight(int sparseIndex)
         {
-            switch (idx)
+            switch (sparseIndex)
             {
                 case 0: return (Index0, Weight0);
                 case 1: return (Index1, Weight1);
@@ -548,7 +548,7 @@ namespace SharpGLTF.Transforms
                 case 5: return (Index5, Weight5);
                 case 6: return (Index6, Weight6);
                 case 7: return (Index7, Weight7);
-                default: throw new ArgumentOutOfRangeException(nameof(idx));
+                default: throw new ArgumentOutOfRangeException(nameof(sparseIndex));
             }
         }
 

+ 16 - 0
src/SharpGLTF.Toolkit/Geometry/VertexBuilder.cs

@@ -95,6 +95,14 @@ namespace SharpGLTF.Geometry
             Skinning.SetWeights(sparse);
         }
 
+        public VertexBuilder(TvG g, TvM m, Transforms.SparseWeight8 bindings)
+        {
+            Geometry = g;
+            Material = m;
+            Skinning = default;
+            Skinning.SetWeights(bindings);
+        }
+
         public VertexBuilder(TvG g, TvM m)
         {
             Geometry = g;
@@ -127,6 +135,14 @@ namespace SharpGLTF.Geometry
             Skinning.SetWeights(sparse);
         }
 
+        public VertexBuilder(TvG g, Transforms.SparseWeight8 bindings)
+        {
+            Geometry = g;
+            Material = default;
+            Skinning = default;
+            Skinning.SetWeights(bindings);
+        }
+
         public static implicit operator VertexBuilder<TvG, TvM, TvS>((TvG, TvM, TvS) tuple)
         {
             return new VertexBuilder<TvG, TvM, TvS>(tuple.Item1, tuple.Item2, tuple.Item3);