[NUI.Scene3D] Add model to test glb format (#5067)
authorEunki Hong <h.pichulia@gmail.com>
Thu, 9 Mar 2023 02:50:58 +0000 (11:50 +0900)
committertscholb <scholb.kim@samsung.com>
Mon, 13 Mar 2023 10:02:21 +0000 (19:02 +0900)
* [NUI.Scene3D] Add model to test glb format

Check glb format file load well
+
Let this demo allow to load multiple camera

Signed-off-by: Eunki Hong <eunkiki.hong@samsung.com>
* Update test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs

Co-authored-by: Seoyeon2Kim <34738918+Seoyeon2Kim@users.noreply.github.com>
* Update Scene3DSample.cs

typo fix

---------

Signed-off-by: Eunki Hong <eunkiki.hong@samsung.com>
Co-authored-by: Eunki Hong <eunkiki.hong@samsung.com>
Co-authored-by: Seoyeon2Kim <34738918+Seoyeon2Kim@users.noreply.github.com>
test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs
test/Tizen.NUI.Scene3D.Sample/res/model/ToyCar/ToyCar.glb [new file with mode: 0644]

index 53daa1c..78bebfd 100644 (file)
@@ -48,6 +48,9 @@ class Scene3DSample : NUIApplication
         // Get from KhronosGroup https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/2CylinderEngine
         "2CylinderEngine/2CylinderEngine_e.gltf",
 
+        // Get from KhronosGroup https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/ToyCar
+        "ToyCar/ToyCar.glb",
+
         "BoxAnimated/BoxAnimated.gltf",
     };
     private int currentModelIndex = 0;
@@ -102,7 +105,7 @@ class Scene3DSample : NUIApplication
         },
     };
     uint currentCameraIndex = 0u;
-    Tizen.NUI.Scene3D.Camera additionalCamera;
+    List<Tizen.NUI.Scene3D.Camera> additionalCameraList;
     const int cameraAnimationDurationMilliseconds = 2000; // milliseconds
     #endregion
 
@@ -180,17 +183,20 @@ class Scene3DSample : NUIApplication
         }
 
         // Release old camera if exist
-        if (additionalCamera != null)
+        if (additionalCameraList != null)
         {
-            if (currentCameraIndex == CameraInfoList.Count)
+            if (currentCameraIndex >= CameraInfoList.Count)
             {
                 currentCameraIndex = 0u;
                 Tizen.Log.Error("NUI", $"Use camera [{currentCameraIndex}]\n");
                 mSceneView.SelectCamera(currentCameraIndex);
             }
-            mSceneView.RemoveCamera(additionalCamera);
-            additionalCamera.Dispose();
-            additionalCamera = null;
+            foreach (var additionalCamera in additionalCameraList)
+            {
+                mSceneView.RemoveCamera(additionalCamera);
+                additionalCamera.Dispose();
+            }
+            additionalCameraList = null;
         }
 
         mModel = new Model(MODEL_DIR + modelUrl)
@@ -210,30 +216,51 @@ class Scene3DSample : NUIApplication
             // You can apply camera properties if the camera parameter exists.
             if (model.GetCameraCount() > 0u)
             {
-                additionalCamera = new Tizen.NUI.Scene3D.Camera();
-                // If we success to make additional camera from model, Add that camera into sceneview, and select that.
-                if (model.ApplyCamera(0u, additionalCamera))
+                additionalCameraList = new List<Tizen.NUI.Scene3D.Camera>();
+                bool firstSucceededCamera = true;
+                for (uint i = 0; i < model.GetCameraCount(); ++i)
                 {
-                    currentCameraIndex = mSceneView.GetCameraCount();
-                    mSceneView.AddCamera(additionalCamera);
-
-                    Tizen.Log.Error("NUI", $"Use additional camera [{currentCameraIndex}]\n");
-                    mSceneView.SelectCamera(currentCameraIndex);
+                    Tizen.NUI.Scene3D.Camera additionalCamera = new Tizen.NUI.Scene3D.Camera();
+                    // If we success to make additional camera from model, Add that camera into sceneview, and select that.
+                    if (model.ApplyCamera(i, additionalCamera))
+                    {
+                        mSceneView.AddCamera(additionalCamera);
+                        if (firstSucceededCamera)
+                        {
+                            currentCameraIndex = mSceneView.GetCameraCount() - 1u;
+
+                            Tizen.Log.Error("NUI", $"Use additional camera [{currentCameraIndex}]\n");
+                            mSceneView.SelectCamera(currentCameraIndex);
+                            firstSucceededCamera = false;
+                        }
+                        additionalCameraList.Add(additionalCamera);
+                    }
+                    else
+                    {
+                        Tizen.Log.Error("NUI", $"Error! camera at [{i}] have some problem\n");
+                        additionalCamera.Dispose();
+                    }
                 }
             }
             Tizen.Log.Error("NUI", $"{model.Name} size : {model.Size.Width}, {model.Size.Height}, {model.Size.Depth}\n");
             Tizen.Log.Error("NUI", $"Animation count {model.GetAnimationCount()} , Camera count {model.GetCameraCount()}\n");
+            
+            // Auto rotate model only if it don't have camera.
+            if (mModel.GetCameraCount() == 0u)
+            {
+                mModelRotateAnimation.Play();
+            }
 
             if (mMutex)
             {
                 mMutex = false;
             }
         };
+
         mModelRotateAnimation = new Animation(modelRotateAnimationDurationMilliseconds);
         mModelRotateAnimation.AnimateBy(mModel, "Orientation", new Rotation(new Radian(new Degree(360.0f)), Vector3.YAxis));
 
         mModelRotateAnimation.Looping = true;
-        mModelRotateAnimation.Play();
 
         mSceneView.Add(mModel);
 
@@ -308,6 +335,18 @@ class Scene3DSample : NUIApplication
                     SetupIBLimage(IBLUrlList[currentIBLIndex].Item1, IBLUrlList[currentIBLIndex].Item2, IBLFactor);
                     break;
                 }
+                case "r":
+                {
+                    if (mModelRotateAnimation.State == Animation.States.Playing)
+                    {
+                        mModelRotateAnimation.Pause();
+                    }
+                    else
+                    {
+                        mModelRotateAnimation.Play();
+                    }
+                    break;
+                }
             }
         }
     }
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/model/ToyCar/ToyCar.glb b/test/Tizen.NUI.Scene3D.Sample/res/model/ToyCar/ToyCar.glb
new file mode 100644 (file)
index 0000000..0aa1495
Binary files /dev/null and b/test/Tizen.NUI.Scene3D.Sample/res/model/ToyCar/ToyCar.glb differ