From: Eunki Hong Date: Thu, 9 Mar 2023 02:50:58 +0000 (+0900) Subject: [NUI.Scene3D] Add model to test glb format (#5067) X-Git-Tag: submit/tizen/20230313.101802~1^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=27acb7c00a3efee804e6cf7331070b459fc8f412;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [NUI.Scene3D] Add model to test glb format (#5067) * [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 * 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 Co-authored-by: Eunki Hong Co-authored-by: Seoyeon2Kim <34738918+Seoyeon2Kim@users.noreply.github.com> --- diff --git a/test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs b/test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs index 53daa1c6b..78bebfd77 100644 --- a/test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs +++ b/test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs @@ -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 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(); + 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 index 000000000..0aa1495cb Binary files /dev/null and b/test/Tizen.NUI.Scene3D.Sample/res/model/ToyCar/ToyCar.glb differ