Browse Source

trying to add extras to instances

Bert Temme 2 years ago
parent
commit
f30e0b101c

+ 2 - 0
src/SharpGLTF.Toolkit/Scenes/Transformers.Schema2.cs

@@ -162,9 +162,11 @@ namespace SharpGLTF.Scenes
 
                     srcOperator.ApplyTo(dstNode, context);
 
+
                     dstNode
                         .UseGpuInstancing()
                         .WithInstanceAccessors(xforms);
+                        // Todo BT: How to get the extras? .WithInstanceCustomAccessor(extras);
 
                     #if DEBUG
                     var dstInstances = dstNode.GetGpuInstancing();

BIN
tests/Assets/tree.glb


+ 47 - 0
tests/SharpGLTF.ThirdParty.Tests/CesiumInstancingTests.cs

@@ -0,0 +1,47 @@
+using NUnit.Framework;
+using SharpGLTF.Scenes;
+using SharpGLTF.Schema2;
+using SharpGLTF.Transforms;
+using System.Collections.Generic;
+using System.Linq;
+using System.Numerics;
+using System.Text.Json.Nodes;
+
+namespace SharpGLTF.ThirdParty
+{
+    public class CesiumTests
+    {
+        [Test]
+        [ResourcePathFormat("*\\Assets")]
+        public void WriteInstancedGlbWithFeatureIds()
+        {
+            var settings = SceneBuilderSchema2Settings.WithGpuInstancing;
+            settings.GpuMeshInstancingMinCount = 0;
+
+            var modelRoot = ModelRoot.Load(ResourceInfo.From("tree.glb"));
+            var meshBuilder = modelRoot.LogicalMeshes.First().ToMeshBuilder();
+            var sceneBuilder = new SceneBuilder();
+            var quaternion = Quaternion.CreateFromYawPitchRoll(0, 0, 0);
+            var scale = Vector3.One;
+
+            sceneBuilder.AddRigidMesh(meshBuilder, new AffineTransform(scale, quaternion, new Vector3(-10, 0, 10)));
+            sceneBuilder.AddRigidMesh(meshBuilder, new AffineTransform(scale, quaternion, new Vector3(0, 0, 0)));
+
+            var extras = new List<JsonNode>();
+            var jsonNode = JsonNode.Parse("{\"_FEATURE_ID_0\":0}");
+            var jsonNode1 = JsonNode.Parse("{\"_FEATURE_ID_0\":1}");
+            extras.Add(jsonNode);
+            extras.Add(jsonNode1);
+
+            // BT todo: pass in the extras, but how?
+            var instancedModel = sceneBuilder.ToGltf2(settings);
+
+            var dstPath = AttachmentInfo
+                .From("instanced_model_with_feature_id.glb")
+                .WriteObject(f => instancedModel.SaveGLB(f));
+
+
+
+        }
+    }
+}