summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEunki Hong <h.pichulia@gmail.com>2023-01-25 14:14:16 +0900
committerTaehyub Kim <taehyub.kim@samsung.com>2023-01-25 18:22:01 +0900
commit9b380f358d32ce84c1ea14fba9674f20706fe78c (patch)
tree01a185d227da9ecc6539a6cad76d58dd76933e58
parent80e70d687ef3144d2f058caab2d68bb4a613fdac (diff)
downloadtizenfx-9b380f358d32ce84c1ea14fba9674f20706fe78c.tar.gz
tizenfx-9b380f358d32ce84c1ea14fba9674f20706fe78c.tar.bz2
tizenfx-9b380f358d32ce84c1ea14fba9674f20706fe78c.zip
[NUI] Add Tizen.NUI.Scene3D simple demo (#4917)
* [NUI] Add Tizen.NUI.Scene3D simple demo Hello 3d world! Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com> * Update Scene3DSample.cs 2022 -> 2023 Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com> Co-authored-by: Eunki, Hong <eunkiki.hong@samsung.com>
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs245
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.code-workspace17
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.csproj26
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_AO.jpgbin0 -> 361678 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_albedo.jpgbin0 -> 935629 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_emissive.jpgbin0 -> 97499 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_metalRoughness.jpgbin0 -> 1300661 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_normal.jpgbin0 -> 517757 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/Irradiance.ktxbin0 -> 1179716 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/Radiance.ktxbin0 -> 25165904 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/forest_diffuse_cubemap.pngbin0 -> 1742731 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/forest_specular_cubemap.pngbin0 -> 4062243 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/papermill_E_diffuse-64.ktxbin0 -> 294980 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/image/papermill_pmrem.ktxbin0 -> 6291164 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated.gltf328
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated0.binbin0 -> 9308 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.binbin0 -> 745512 bytes
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.gltf217
-rw-r--r--test/Tizen.NUI.Scene3D.Sample/shared/res/Tizen.NUI.Scene3D.Sample.pngbin0 -> 2711 bytes
-rwxr-xr-xtest/Tizen.NUI.Scene3D.Sample/tizen-manifest.xml16
20 files changed, 849 insertions, 0 deletions
diff --git a/test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs b/test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs
new file mode 100644
index 000000000..f4123eeaf
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/Scene3DSample.cs
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Constants;
+using Tizen.NUI.Scene3D;
+using System.Collections.Generic;
+
+class Scene3DSample : NUIApplication
+{
+ static string IMAGE_DIR = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "image/";
+ static string MODEL_DIR = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "model/";
+
+ Window mWindow;
+ Vector2 mWindowSize;
+
+ SceneView mSceneView;
+ Model mModel;
+
+ uint currentCameraIndex = 0u;
+ const int cameraAnimationDurationMilliSeconds = 2000; // milliSeconds
+
+ Animation mModelRotateAnimation;
+ const int modelRotateAnimationDurationMilliSeconds = 10000; // milliSeconds
+
+ protected void CreateSceneView()
+ {
+ mSceneView = new SceneView()
+ {
+ SizeWidth = mWindowSize.Width,
+ SizeHeight = mWindowSize.Height,
+ PositionX = 0.0f,
+ PositionY = 0.0f,
+ PivotPoint = PivotPoint.TopLeft,
+ ParentOrigin = ParentOrigin.TopLeft,
+ PositionUsesPivotPoint = true,
+ };
+
+ SetupSceneViewCamera(mSceneView);
+
+ mWindow.Add(mSceneView);
+ }
+ private void SetupSceneViewCamera(SceneView sceneView)
+ {
+ // Default camera setting
+ // Note : SceneView always have 1 default camera.
+ Tizen.NUI.Scene3D.Camera defaultCamera = sceneView.GetCamera(0u);
+
+ defaultCamera.PositionX = 0.0f;
+ defaultCamera.PositionY = 0.0f;
+ defaultCamera.PositionZ = 5.55f;
+ defaultCamera.NearPlaneDistance = 0.5f;
+ defaultCamera.FarPlaneDistance = 50.0f;
+ //defaultCamera.Orientation = new Rotation(new Radian(new Degree(180.0f)), Vector3.YAxis);
+ defaultCamera.FieldOfView = new Radian(new Degree(45.0f));
+ defaultCamera.OrthographicSize = 2.7f;
+
+ // Additional camera setting (top view camera).
+ Tizen.NUI.Scene3D.Camera camera = new Tizen.NUI.Scene3D.Camera()
+ {
+ PositionX = 0.0f,
+ PositionY = -3.95f,
+ PositionZ = 0.0f,
+ NearPlaneDistance = 0.5f,
+ FarPlaneDistance = 50.0f,
+ // Rotate by XAxis first, and then rotate by YAxis
+ Orientation = new Rotation(new Radian(new Degree(90.0f)), Vector3.YAxis) *
+ new Rotation(new Radian(new Degree(-90.0f)), Vector3.XAxis),
+ FieldOfView = new Radian(new Degree(70.0f)),
+ OrthographicSize = 2.7f,
+ };
+ sceneView.AddCamera(camera);
+ }
+
+ protected void CreateModel(string modelUrl)
+ {
+ // Release old one.
+ if(mModel != null)
+ {
+ mModel.Unparent();
+ mModel.Dispose();
+ }
+
+ mModel = new Model(MODEL_DIR + modelUrl)
+ {
+ Name = modelUrl,
+ };
+ mModel.ResourcesLoaded += (s, e) =>
+ {
+ Model model = s as Model;
+
+ // You can play animation if it has.
+ if(model.GetAnimationCount() > 0u)
+ {
+ model.GetAnimation(0u).Looping = true;
+ model.GetAnimation(0u).Play();
+ }
+ Tizen.Log.Error("NUI", $"{model.Name} size : {model.Size.Width}, {model.Size.Height}, {model.Size.Depth}\n");
+ };
+ 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);
+ }
+
+ void SetupIBLimage(string specularUrl, string diffuseUrl, float iblFactor)
+ {
+ mSceneView.SetImageBasedLightSource(IMAGE_DIR + specularUrl, IMAGE_DIR + diffuseUrl,iblFactor);
+ }
+
+ void OnKeyEvent(object source, Window.KeyEventArgs e)
+ {
+ if (e.Key.State == Key.StateType.Down)
+ {
+ FullGC();
+ //Streamline.AnnotateChannelEnd(0);
+
+ switch( e.Key.KeyPressedName )
+ {
+ case "Escape":
+ case "Back":
+ {
+ Deactivate();
+ Exit();
+ break;
+ }
+
+ case "Return":
+ case "Select":
+ {
+ currentCameraIndex++;
+ if(currentCameraIndex >= mSceneView.GetCameraCount())
+ {
+ currentCameraIndex = 0;
+ }
+
+ mSceneView.CameraTransition(currentCameraIndex, cameraAnimationDurationMilliSeconds);
+ break;
+ }
+
+ case "1":
+ {
+ currentModelIndex++;
+ if(currentModelIndex >= ModelUrlList.Count)
+ {
+ currentModelIndex = 0;
+ }
+
+ CreateModel(ModelUrlList[currentModelIndex]);
+ break;
+ }
+ case "2":
+ {
+ currentIBLIndex++;
+ if(currentIBLIndex >= IBLUrlList.Count)
+ {
+ currentIBLIndex = 0;
+ }
+
+ SetupIBLimage(IBLUrlList[currentIBLIndex].Item1, IBLUrlList[currentIBLIndex].Item2, 0.7f);
+ break;
+ }
+ }
+ }
+ }
+
+ private static readonly List<string> ModelUrlList = new List<string>()
+ {
+ // Model reference : https://sketchfab.com/models/b81008d513954189a063ff901f7abfe4
+ // Get from KhronosGroup https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/DamagedHelmet
+ "DamagedHelmet/DamagedHelmet.gltf",
+ "BoxAnimated/BoxAnimated.gltf",
+ };
+ private int currentModelIndex = 0;
+
+ private static readonly List<(string, string)> IBLUrlList = new List<(string, string)>
+ {
+ ("forest_diffuse_cubemap.png", "forest_specular_cubemap.png"),
+ ("papermill_E_diffuse-64.ktx", "papermill_pmrem.ktx"),
+ ("Irradiance.ktx", "Radiance.ktx"),
+ };
+ private int currentIBLIndex = 0;
+
+ public void Activate()
+ {
+ mWindow = Window.Instance;
+ mWindow.BackgroundColor = Color.DarkOrchid;
+ mWindowSize = mWindow.WindowSize;
+
+ mWindow.KeyEvent += OnKeyEvent;
+
+ CreateSceneView();
+ SetupIBLimage(IBLUrlList[currentIBLIndex].Item1, IBLUrlList[currentIBLIndex].Item2, 0.7f);
+ CreateModel(ModelUrlList[currentModelIndex]);
+ }
+ public void FullGC(){
+ global::System.GC.Collect();
+ global::System.GC.WaitForPendingFinalizers();
+ global::System.GC.Collect();
+ }
+
+ public void Deactivate()
+ {
+ DestroyScene();
+ }
+ private void DestroyScene()
+ {
+ }
+
+ protected override void OnCreate()
+ {
+ // Up call to the Base class first
+ base.OnCreate();
+ Activate();
+ }
+
+ /// <summary>
+ /// The main entry point for the application.
+ /// </summary>
+ [STAThread] // Forces app to use one thread to access NUI
+ static void Main(string[] args)
+ {
+ Scene3DSample example = new Scene3DSample();
+ example.Run(args);
+ }
+}
diff --git a/test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.code-workspace b/test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.code-workspace
new file mode 100644
index 000000000..3efec6587
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.code-workspace
@@ -0,0 +1,17 @@
+{
+ "folders": [
+ {
+ "path": "."
+ },
+ {
+ "path": "../../src/Tizen.NUI"
+ },
+ {
+ "path": "../../src/Tizen.NUI.Components"
+ },
+ {
+ "path": "../../src/Tizen.NUI.Scene3D"
+ }
+ ],
+ "settings": {}
+}
diff --git a/test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.csproj b/test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.csproj
new file mode 100644
index 000000000..42edfaa76
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/Tizen.NUI.Scene3D.Sample.csproj
@@ -0,0 +1,26 @@
+<Project Sdk="Microsoft.NET.Sdk">
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>netcoreapp3.1</TargetFramework>
+ <AssemblyName>Scene3DSample</AssemblyName>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugType>portable</DebugType>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>None</DebugType>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Tizen.NET.Sdk" Version="1.0.9" />
+ <ProjectReference Include="../../src/Tizen/Tizen.csproj" />
+ <ProjectReference Include="../../src/Tizen.NUI.Components/Tizen.NUI.Components.csproj" />
+ <ProjectReference Include="../../src/Tizen.NUI.Scene3D/Tizen.NUI.Scene3D.csproj" />
+ <ProjectReference Include="../../src/Tizen.NUI/Tizen.NUI.csproj" />
+ </ItemGroup>
+
+ <PropertyGroup>
+ <NeedInjection>True</NeedInjection>
+ </PropertyGroup>
+</Project>
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_AO.jpg b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_AO.jpg
new file mode 100644
index 000000000..419f62840
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_AO.jpg
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_albedo.jpg b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_albedo.jpg
new file mode 100644
index 000000000..15d64855c
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_albedo.jpg
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_emissive.jpg b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_emissive.jpg
new file mode 100644
index 000000000..2de59e897
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_emissive.jpg
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_metalRoughness.jpg b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_metalRoughness.jpg
new file mode 100644
index 000000000..04874cb6e
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_metalRoughness.jpg
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_normal.jpg b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_normal.jpg
new file mode 100644
index 000000000..94ca20a2d
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/DamagedHelmet/Default_normal.jpg
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/Irradiance.ktx b/test/Tizen.NUI.Scene3D.Sample/res/image/Irradiance.ktx
new file mode 100644
index 000000000..940366c6e
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/Irradiance.ktx
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/Radiance.ktx b/test/Tizen.NUI.Scene3D.Sample/res/image/Radiance.ktx
new file mode 100644
index 000000000..c25024991
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/Radiance.ktx
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/forest_diffuse_cubemap.png b/test/Tizen.NUI.Scene3D.Sample/res/image/forest_diffuse_cubemap.png
new file mode 100644
index 000000000..ff3e237e5
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/forest_diffuse_cubemap.png
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/forest_specular_cubemap.png b/test/Tizen.NUI.Scene3D.Sample/res/image/forest_specular_cubemap.png
new file mode 100644
index 000000000..d5cb909c2
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/forest_specular_cubemap.png
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/papermill_E_diffuse-64.ktx b/test/Tizen.NUI.Scene3D.Sample/res/image/papermill_E_diffuse-64.ktx
new file mode 100644
index 000000000..c000b615e
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/papermill_E_diffuse-64.ktx
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/image/papermill_pmrem.ktx b/test/Tizen.NUI.Scene3D.Sample/res/image/papermill_pmrem.ktx
new file mode 100644
index 000000000..62df20eaf
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/image/papermill_pmrem.ktx
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated.gltf b/test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated.gltf
new file mode 100644
index 000000000..d40924e3d
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated.gltf
@@ -0,0 +1,328 @@
+{
+ "asset": {
+ "generator": "COLLADA2GLTF",
+ "version": "2.0"
+ },
+ "scene": 0,
+ "scenes": [
+ {
+ "nodes": [
+ 3,
+ 0
+ ]
+ }
+ ],
+ "nodes": [
+ {
+ "children": [
+ 1
+ ],
+ "rotation": [
+ -0.0,
+ -0.0,
+ -0.0,
+ -1.0
+ ]
+ },
+ {
+ "children": [
+ 2
+ ]
+ },
+ {
+ "mesh": 0,
+ "rotation": [
+ -0.0,
+ -0.0,
+ -0.0,
+ -1.0
+ ]
+ },
+ {
+ "mesh": 1
+ }
+ ],
+ "meshes": [
+ {
+ "primitives": [
+ {
+ "attributes": {
+ "NORMAL": 1,
+ "POSITION": 2
+ },
+ "indices": 0,
+ "mode": 4,
+ "material": 0
+ }
+ ],
+ "name": "inner_box"
+ },
+ {
+ "primitives": [
+ {
+ "attributes": {
+ "NORMAL": 4,
+ "POSITION": 5
+ },
+ "indices": 3,
+ "mode": 4,
+ "material": 1
+ }
+ ],
+ "name": "outer_box"
+ }
+ ],
+ "animations": [
+ {
+ "channels": [
+ {
+ "sampler": 0,
+ "target": {
+ "node": 2,
+ "path": "rotation"
+ }
+ },
+ {
+ "sampler": 1,
+ "target": {
+ "node": 0,
+ "path": "translation"
+ }
+ }
+ ],
+ "samplers": [
+ {
+ "input": 6,
+ "interpolation": "LINEAR",
+ "output": 7
+ },
+ {
+ "input": 8,
+ "interpolation": "LINEAR",
+ "output": 9
+ }
+ ]
+ }
+ ],
+ "accessors": [
+ {
+ "bufferView": 0,
+ "byteOffset": 0,
+ "componentType": 5123,
+ "count": 186,
+ "max": [
+ 95
+ ],
+ "min": [
+ 0
+ ],
+ "type": "SCALAR"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 0,
+ "componentType": 5126,
+ "count": 96,
+ "max": [
+ 1.0,
+ 1.0,
+ 1.0
+ ],
+ "min": [
+ -1.0,
+ -1.0,
+ -1.0
+ ],
+ "type": "VEC3"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 1152,
+ "componentType": 5126,
+ "count": 96,
+ "max": [
+ 0.33504000306129458,
+ 0.5,
+ 0.33504000306129458
+ ],
+ "min": [
+ -0.33504000306129458,
+ -0.5,
+ -0.33504000306129458
+ ],
+ "type": "VEC3"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 372,
+ "componentType": 5123,
+ "count": 576,
+ "max": [
+ 223
+ ],
+ "min": [
+ 0
+ ],
+ "type": "SCALAR"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 2304,
+ "componentType": 5126,
+ "count": 224,
+ "max": [
+ 1.0,
+ 1.0,
+ 1.0
+ ],
+ "min": [
+ -1.0,
+ -1.0,
+ -1.0
+ ],
+ "type": "VEC3"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 4992,
+ "componentType": 5126,
+ "count": 224,
+ "max": [
+ 0.5,
+ 0.5,
+ 0.5
+ ],
+ "min": [
+ -0.5,
+ -0.5,
+ -0.5
+ ],
+ "type": "VEC3"
+ },
+ {
+ "bufferView": 2,
+ "byteOffset": 0,
+ "componentType": 5126,
+ "count": 2,
+ "max": [
+ 2.5
+ ],
+ "min": [
+ 1.25
+ ],
+ "type": "SCALAR"
+ },
+ {
+ "bufferView": 3,
+ "byteOffset": 0,
+ "componentType": 5126,
+ "count": 2,
+ "max": [
+ 1.0,
+ 0.0,
+ 0.0,
+ 4.4896593387466768e-11
+ ],
+ "min": [
+ -0.0,
+ 0.0,
+ 0.0,
+ -1.0
+ ],
+ "type": "VEC4"
+ },
+ {
+ "bufferView": 2,
+ "byteOffset": 8,
+ "componentType": 5126,
+ "count": 4,
+ "max": [
+ 3.708329916000366
+ ],
+ "min": [
+ 0.0
+ ],
+ "type": "SCALAR"
+ },
+ {
+ "bufferView": 4,
+ "byteOffset": 0,
+ "componentType": 5126,
+ "count": 4,
+ "max": [
+ 0.0,
+ 2.5199999809265138,
+ 0.0
+ ],
+ "min": [
+ 0.0,
+ 0.0,
+ 0.0
+ ],
+ "type": "VEC3"
+ }
+ ],
+ "materials": [
+ {
+ "pbrMetallicRoughness": {
+ "baseColorFactor": [
+ 0.800000011920929,
+ 0.4159420132637024,
+ 0.7952920198440552,
+ 1.0
+ ],
+ "metallicFactor": 0.0
+ },
+ "name": "inner"
+ },
+ {
+ "pbrMetallicRoughness": {
+ "baseColorFactor": [
+ 0.3016040027141571,
+ 0.5335419774055481,
+ 0.800000011920929,
+ 1.0
+ ],
+ "metallicFactor": 0.0
+ },
+ "name": "outer"
+ }
+ ],
+ "bufferViews": [
+ {
+ "buffer": 0,
+ "byteOffset": 7784,
+ "byteLength": 1524,
+ "target": 34963
+ },
+ {
+ "buffer": 0,
+ "byteOffset": 80,
+ "byteLength": 7680,
+ "byteStride": 12,
+ "target": 34962
+ },
+ {
+ "buffer": 0,
+ "byteOffset": 7760,
+ "byteLength": 24
+ },
+ {
+ "buffer": 0,
+ "byteOffset": 0,
+ "byteLength": 32
+ },
+ {
+ "buffer": 0,
+ "byteOffset": 32,
+ "byteLength": 48
+ }
+ ],
+ "buffers": [
+ {
+ "byteLength": 9308,
+ "uri": "BoxAnimated0.bin"
+ }
+ ]
+}
+
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated0.bin b/test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated0.bin
new file mode 100644
index 000000000..2e4ef6eff
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/model/BoxAnimated/BoxAnimated0.bin
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.bin b/test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.bin
new file mode 100644
index 000000000..6fea01e99
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.bin
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.gltf b/test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.gltf
new file mode 100644
index 000000000..9fad06a53
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/res/model/DamagedHelmet/DamagedHelmet.gltf
@@ -0,0 +1,217 @@
+{
+ "asset": {
+ "generator": "Unity 2017.1.0f3",
+ "extras": {
+ "exporterVersion" : "2.2.0"
+ },
+ "version": "2.0"
+ },
+ "accessors": [
+ {
+ "bufferView": 2,
+ "byteOffset": 0,
+ "componentType": 5126,
+ "count": 13600,
+ "max": [ 0.944977, 0.900995, 1 ],
+ "min": [ -0.944977, -0.900974, -1 ],
+ "type": "VEC3"
+ },
+ {
+ "bufferView": 2,
+ "byteOffset": 163200,
+ "componentType": 5126,
+ "count": 13600,
+ "max": [ 1, 1, 1 ],
+ "min": [ -1, -1, -1 ],
+ "type": "VEC3"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 0,
+ "componentType": 5126,
+ "count": 13600,
+ "max": [ 0.999976, 0.998666 ],
+ "min": [ 0.00244864, 0.00055312 ],
+ "type": "VEC2"
+ },
+ {
+ "bufferView": 3,
+ "byteOffset": 0,
+ "componentType": 5126,
+ "count": 13600,
+ "max": [ 1, 1, 1, 1 ],
+ "min": [ -1, -1, -1, -1 ],
+ "type": "VEC4"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 0,
+ "componentType": 5123,
+ "count": 46356,
+ "max": [ 13599 ],
+ "min": [ 0 ],
+ "type": "SCALAR"
+ }
+ ],
+ "buffers": [
+ {
+ "byteLength": 745512,
+ "uri": "DamagedHelmet.bin"
+ }
+ ],
+ "bufferViews": [
+ {
+ "buffer": 0,
+ "byteLength": 92712,
+ "target": 34963,
+ "byteOffset": 652800
+ },
+ {
+ "buffer": 0,
+ "byteLength": 108800,
+ "target": 34962,
+ "byteStride": 8,
+ "byteOffset": 0
+ },
+ {
+ "buffer": 0,
+ "byteLength": 326400,
+ "target": 34962,
+ "byteStride": 12,
+ "byteOffset": 108800
+ },
+ {
+ "buffer": 0,
+ "byteLength": 217600,
+ "target": 34962,
+ "byteStride": 16,
+ "byteOffset": 435200
+ }
+ ],
+ "images": [
+ {
+ "uri": "../../image/DamagedHelmet/Default_albedo.jpg"
+ },
+ {
+ "uri": "../../image/DamagedHelmet/Default_metalRoughness.jpg"
+ },
+ {
+ "uri": "../../image/DamagedHelmet/Default_normal.jpg"
+ },
+ {
+ "uri": "../../image/DamagedHelmet/Default_emissive.jpg"
+ },
+ {
+ "uri": "../../image/DamagedHelmet/Default_AO.jpg"
+ }
+ ],
+ "materials": [
+ {
+ "pbrMetallicRoughness": {
+ "baseColorTexture" : {
+ "index" : 0,
+ "texCoord" : 0
+ },
+ "baseColorFactor": [1, 1, 1, 1],
+ "metallicRoughnessTexture" : {
+ "index" : 1,
+ "texCoord" : 0
+ },
+ "metallicFactor": 1,
+ "roughnessFactor": 1
+ },
+ "normalTexture" : {
+ "index" : 2,
+ "texCoord" : 0,
+ "scale" : 0.8
+ },
+ "emissiveTexture" : {
+ "index" : 3,
+ "texCoord" : 0
+ },
+ "emissiveFactor": [1, 1, 1],
+ "occlusionTexture" : {
+ "index" : 4,
+ "texCoord" : 0,
+ "strength" : 0.632
+ },
+ "doubleSided": false,
+ "name": "Helmet_mat"
+ }
+ ],
+ "meshes": [
+ {
+ "name": "mesh_helmet_LP_14908damagedHelmet",
+ "primitives": [
+ {
+ "attributes": {
+ "POSITION": 0,
+ "NORMAL": 1,
+ "TEXCOORD_0": 2,
+ "TANGENT": 3
+ },
+ "indices": 4,
+ "material": 0,
+ "mode": 4
+ }
+ ]
+ }
+ ],
+ "nodes": [
+ {
+ "name": "UnityGlTF_root",
+ "children": [
+ 1
+ ]
+ },
+ {
+ "name": "node_damagedHelmet_-6498",
+ "mesh": 0,
+ "rotation" : [
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0
+ ]
+ }
+ ],
+ "samplers": [
+ {
+ "magFilter": 9729,
+ "minFilter": 9985,
+ "wrapS": 10497,
+ "wrapT": 10497
+ }
+ ],
+ "scenes": [
+ {
+ "name":"defaultScene",
+ "nodes": [
+ 0
+ ]
+ }
+ ],
+ "scene": 0,
+ "textures": [
+ {
+ "sampler": 0,
+ "source": 0
+ },
+ {
+ "sampler": 0,
+ "source": 1
+ },
+ {
+ "sampler": 0,
+ "source": 2
+ },
+ {
+ "sampler": 0,
+ "source": 3
+ },
+ {
+ "sampler": 0,
+ "source": 4
+ }
+ ]
+} \ No newline at end of file
diff --git a/test/Tizen.NUI.Scene3D.Sample/shared/res/Tizen.NUI.Scene3D.Sample.png b/test/Tizen.NUI.Scene3D.Sample/shared/res/Tizen.NUI.Scene3D.Sample.png
new file mode 100644
index 000000000..ef30093cd
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/shared/res/Tizen.NUI.Scene3D.Sample.png
Binary files differ
diff --git a/test/Tizen.NUI.Scene3D.Sample/tizen-manifest.xml b/test/Tizen.NUI.Scene3D.Sample/tizen-manifest.xml
new file mode 100755
index 000000000..ffc26f561
--- /dev/null
+++ b/test/Tizen.NUI.Scene3D.Sample/tizen-manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="6" package="org.tizen.example.Tizen.NUI.Scene3D.Sample" version="1.0.0">
+ <profile name="common" />
+ <ui-application appid="org.tizen.example.Tizen.NUI.Scene3D.Sample"
+ exec="Scene3DSample.dll"
+ type="dotnet-nui"
+ multiple="false"
+ taskmanage="true"
+ nodisplay="false"
+ launch_mode="single"
+ >
+ <label>Tizen.NUI.Scene3D.Sample</label>
+ <icon>Tizen.NUI.Scene3D.Sample.png</icon>
+ <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
+ </ui-application>
+</manifest>