Scene and glTF Loader Demo APP 00/188700/31
authorSeungho, Baek <sbsh.baek@samsung.com>
Fri, 7 Sep 2018 10:39:53 +0000 (19:39 +0900)
committerseungho <sbsh.baek@samsung.com>
Fri, 29 Apr 2022 07:03:10 +0000 (16:03 +0900)
 - load 5 glTF ( 1 scene contains Animation )
 - Input Up or Down key to rotate or stop Camera
 - Input Left or Right key to change glTF file
 - Double Touch change glTF file

Change-Id: I2653f219dc10413f1d59b4799533d0215de5656c
Signed-off-by: Seungho, Baek <sbsh.baek@samsung.com>
45 files changed:
com.samsung.dali-demo.xml
demo/dali-demo.cpp
examples/scene3d-view/scene3d-view-example.cpp [new file with mode: 0644]
resources/images/BoomBox_baseColor.png [new file with mode: 0644]
resources/images/BoomBox_emissive.png [new file with mode: 0644]
resources/images/BoomBox_normal.png [new file with mode: 0644]
resources/images/BoomBox_occlusionRoughnessMetallic.png [new file with mode: 0644]
resources/images/Default_AO.jpg [new file with mode: 0644]
resources/images/Default_albedo.jpg [new file with mode: 0644]
resources/images/Default_emissive.jpg [new file with mode: 0644]
resources/images/Default_metalRoughness.jpg [new file with mode: 0755]
resources/images/Default_normal.jpg [new file with mode: 0644]
resources/images/Lantern_baseColor.png [new file with mode: 0644]
resources/images/Lantern_emissive.png [new file with mode: 0644]
resources/images/Lantern_normal.png [new file with mode: 0644]
resources/images/Lantern_roughnessMetallic.png [new file with mode: 0644]
resources/images/MC_Default_AO.jpg [new file with mode: 0644]
resources/images/MC_Default_albedo.jpg [new file with mode: 0644]
resources/images/MC_Default_metalRoughness.jpg [new file with mode: 0644]
resources/images/MC_Default_normal.jpg [new file with mode: 0644]
resources/images/forest_diffuse_cubemap.png [new file with mode: 0644]
resources/images/forest_specular_cubemap.png [new file with mode: 0644]
resources/models/BoomBox.bin [new file with mode: 0644]
resources/models/BoomBox.gltf [new file with mode: 0644]
resources/models/BoxAnimated.gltf [new file with mode: 0644]
resources/models/BoxAnimated0.bin [new file with mode: 0644]
resources/models/DamagedHelmet.bin [new file with mode: 0644]
resources/models/DamagedHelmet.gltf [new file with mode: 0644]
resources/models/Lantern.bin [new file with mode: 0644]
resources/models/Lantern.gltf [new file with mode: 0644]
resources/models/microphone.bin [new file with mode: 0644]
resources/models/microphone.gltf [new file with mode: 0644]
resources/po/as.po
resources/po/de.po
resources/po/en_GB.po
resources/po/en_US.po
resources/po/es.po
resources/po/fi.po
resources/po/ko.po
resources/po/ml.po
resources/po/ur.po
resources/po/zn_CH.po
resources/shaders/cube_shader.fsh [new file with mode: 0644]
resources/shaders/cube_shader.vsh [new file with mode: 0644]
shared/dali-demo-strings.h

index a4b570a..40fb016 100644 (file)
        <ui-application appid="rendering-triangle.example" exec="/usr/apps/com.samsung.dali-demo/bin/rendering-triangle.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
                <label>Rendering Triangle</label>
        </ui-application>
+       <ui-application appid="scene3d-view.example" exec="/usr/apps/com.samsung.dali-demo/bin/scene3d-view.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
+               <label>Scene3d View</label>
+       </ui-application>
        <ui-application appid="scene-loader.example" exec="/usr/apps/com.samsung.dali-demo/bin/scene-loader.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
                <label>Scene Loader</label>
        </ui-application>
index 20ba080..b8fea35 100644 (file)
@@ -58,6 +58,7 @@ int DALI_EXPORT_API main(int argc, char** argv)
   demo.AddExample(Example("renderer-stencil.example", DALI_DEMO_STR_TITLE_RENDERER_STENCIL));
   demo.AddExample(Example("rendering-skybox.example", DALI_DEMO_STR_TITLE_SKYBOX));
   demo.AddExample(Example("rendering-basic-pbr.example", DALI_DEMO_STR_TITLE_PBR));
+  demo.AddExample(Example("scene3d-view.example", DALI_DEMO_STR_TITLE_SCENE3D_VIEW));
 #ifdef DALI_SCENE_LOADER_AVAILABLE
   demo.AddExample(Example("scene-loader.example", DALI_DEMO_STR_TITLE_SCENE_LOADER));
 #endif //DALI_SCENE_LOADER_AVAILABLE
diff --git a/examples/scene3d-view/scene3d-view-example.cpp b/examples/scene3d-view/scene3d-view-example.cpp
new file mode 100644 (file)
index 0000000..15bfaa2
--- /dev/null
@@ -0,0 +1,639 @@
+/*
+ * Copyright (c) 2022 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.
+ *
+ */
+
+#include <dali-toolkit/dali-toolkit.h>
+#include <dali/dali.h>
+#include <dali/integration-api/debug.h>
+#include <dali/public-api/actors/camera-actor.h>
+#include <dali/devel-api/adaptor-framework/file-loader.h>
+#include <dali/devel-api/adaptor-framework/image-loading.h>
+#include <cstring>
+#include <dali-toolkit/devel-api/controls/scene3d-view/scene3d-view.h>
+#include <dali/devel-api/adaptor-framework/file-stream.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+/*
+ * This example shows how to create and display a Scene3dView control.
+ * The application can load 5 different glTF model to Scene3dView control.
+ * Each model has diffirent material. BoomBox shows glossy or matt plastic material.
+ * DamagedHelmet shows a kind of reflective glass and metallic object.
+ * Microphone shows a roughness of metallic objects.
+ * and Lantern shows a realistic difference between wood object and metallic object.
+ * Rotate the camera by swiping.
+ * A double tap changes the model.
+ */
+
+namespace
+{
+
+enum GLTF_MODEL_LIST
+{
+  GLTF_ANIMATED_BOX = 0,
+  GLTF_LANTERN,
+  GLTF_BOOMBOX,
+  GLTF_DAMAGED_HELMET,
+  GLTF_MICROPHONE,
+  NUM_OF_GLTF_MODELS
+};
+
+const char* gltf_list[6] =
+  {
+    /**
+     * For the BoxAnimated.gltf and its Assets
+     * Donated by Cesium for glTF testing.
+     * Take from https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoxAnimated
+     */
+    "BoxAnimated.gltf",
+    /**
+     * For the Lantern.gltf and its Assets
+     * Donated by Microsoft for glTF testing
+     * Created by Ryan Martin
+     * Take from https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/Lantern
+     */
+    "Lantern.gltf",
+    /**
+     * For the BoomBox.gltf and its Assets
+     * Donated by Microsoft for glTF testing
+     * Created by Ryan Martin
+     * Take from https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/BoomBox
+     */
+    "BoomBox.gltf",
+    /**
+     * For the DamagedHelmet.gltf and its Assets
+     * Battle Damaged Sci-fi Helmet - PBR by theblueturtle_, published under a
+     * Creative Commons Attribution-NonCommercial license
+     * https://sketchfab.com/models/b81008d513954189a063ff901f7abfe4
+     */
+    "DamagedHelmet.gltf",
+    /**
+     * For the microphone.gltf and its Assets
+     * Microphone GXL 066 Bafhcteks by Gistold, published under a
+     * Creative Commons Attribution-NonCommercial license
+     * https://sketchfab.com/models/5172dbe9281a45f48cee8c15bdfa1831
+     */
+    "microphone.gltf"};
+
+Vector3 camera_position_list[6] =
+  {
+    Vector3(-6.00, -8.00, 12.00),
+    Vector3(-30.0, -40.0, 60.0),
+    Vector3(-0.03, -0.04, 0.06),
+    Vector3(-3.00, -4.00, 6.00),
+    Vector3(-0.00, -3.00, 4.00)};
+
+/**
+ * For the diffuse and specular cube map texture.
+ * These textures are based off version of Wave engine sample
+ * Take from https://github.com/WaveEngine/Samples
+ *
+ * Copyright (c) 2016 Wave Coorporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+const std::string modeldir = DEMO_MODEL_DIR;
+const std::string imagedir = DEMO_IMAGE_DIR;
+const std::string uri_diffuse_texture(imagedir + "forest_diffuse_cubemap.png");
+const std::string uri_specular_texture(imagedir + "forest_specular_cubemap.png");
+
+const int32_t cubeMap_index_x[6] = {2, 0, 1, 1, 1, 3};
+const int32_t cubeMap_index_y[6] = {1, 1, 0, 2, 1, 1};
+
+const char* VERTEX_SHADER_URL   = DEMO_SHADER_DIR "cube_shader.vsh";
+const char* FRAGMENT_SHADER_URL = DEMO_SHADER_DIR "cube_shader.fsh";
+
+/**
+ * @brief Load a shader source file
+ * @param[in] The path of the source file
+ * @param[out] The contents of file
+ * @return True if the source was read successfully
+ */
+bool LoadShaderCode(const std::string& fullpath, std::vector<char>& output)
+{
+  Dali::FileStream fileStream(fullpath, FileStream::READ | FileStream::BINARY);
+  FILE*            file = fileStream.GetFile();
+  if(nullptr == file)
+  {
+    return false;
+  }
+
+  bool retValue = false;
+  if(!fseek(file, 0, SEEK_END))
+  {
+    long int size = ftell(file);
+
+    if((size != -1L) &&
+       (!fseek(file, 0, SEEK_SET)))
+    {
+      output.resize(size + 1);
+      std::fill(output.begin(), output.end(), 0);
+      ssize_t result = fread(output.data(), size, 1, file);
+
+      retValue = (result >= 0);
+    }
+  }
+
+  return retValue;
+}
+
+/**
+ * @brief Load vertex and fragment shader source
+ * @param[in] shaderVertexFileName is the filepath of Vertex shader
+ * @param[in] shaderFragFileName is the filepath of Fragment shader
+ * @return the Dali::Shader object
+ */
+Shader LoadShaders(const std::string& shaderVertexFileName, const std::string& shaderFragFileName)
+{
+  Shader            shader;
+  std::vector<char> bufV, bufF;
+
+  if(LoadShaderCode(shaderVertexFileName.c_str(), bufV))
+  {
+    if(LoadShaderCode(shaderFragFileName.c_str(), bufF))
+    {
+      shader = Shader::New(bufV.data(), bufF.data());
+    }
+  }
+  return shader;
+}
+
+} // namespace
+
+/**
+ * This example shows how to render glTF model with Scene3dView
+ * How to test
+ *  - Input UP or DOWN key to make the model rotate or stop.
+ *  - Input LEFT or RIGHT key to change glTF model
+ *  - Double Touch also changes glTF model.
+ */
+class Scene3dViewController : public ConnectionTracker
+{
+public:
+  Scene3dViewController(Application& application)
+  : mApplication(application),
+    mModelOrientation(),
+    mAnimationStop(false)
+  {
+    // Connect to the Application's Init signal
+    mApplication.InitSignal().Connect(this, &Scene3dViewController::Create);
+  }
+
+  ~Scene3dViewController()
+  {
+    mAnimation.Stop();
+  }
+
+  // The Init signal is received once (only) during the Application lifetime
+  void Create(Application& application)
+  {
+    mWindow = application.GetWindow();
+
+    // Get a handle to the mWindow
+    mWindow.SetBackgroundColor(Color::WHITE);
+
+    RenderTask renderTask = mWindow.GetRenderTaskList().GetTask(0);
+    renderTask.SetCullMode(false);
+
+    mCurrentGlTF = GLTF_ANIMATED_BOX;
+    CreateSceneFromGLTF(gltf_list[mCurrentGlTF]);
+    SetCameraActor();
+    CreateSkybox();
+    SetAnimation();
+
+    // Respond to a click anywhere on the mWindow
+    mWindow.GetRootLayer().TouchedSignal().Connect(this, &Scene3dViewController::OnTouch);
+    mWindow.KeyEventSignal().Connect(this, &Scene3dViewController::OnKeyEvent);
+    mWindow.GetRootLayer().WheelEventSignal().Connect(this, &Scene3dViewController::OnWheel);
+
+    mDoubleTap     = false;
+    mDoubleTapTime = Timer::New(150);
+    mDoubleTapTime.TickSignal().Connect(this, &Scene3dViewController::OnDoubleTapTime);
+  }
+
+  bool OnWheel(Actor actor, const WheelEvent& wheelEvent)
+  {
+    mWheelDelta -= wheelEvent.GetDelta() * 0.025f;
+    mWheelDelta = std::max(0.5f, mWheelDelta);
+    mWheelDelta = std::min(2.0f, mWheelDelta);
+
+    if(mScene3dView)
+    {
+      mScene3dView.SetProperty(Actor::Property::SCALE, mWheelDelta);
+    }
+
+    return true;
+  }
+
+  bool OnDoubleTapTime()
+  {
+    mDoubleTap = false;
+    return true;
+  }
+
+  void CreateSceneFromGLTF(std::string modelName)
+  {
+    if(mScene3dView)
+    {
+      mWindow.GetRootLayer().Remove(mScene3dView);
+    }
+
+    std::string gltfUrl = modeldir;
+    gltfUrl += modelName;
+    mScene3dView = Scene3dView::New(gltfUrl, uri_diffuse_texture, uri_specular_texture, Vector4::ONE);
+
+    mScene3dView.SetLight(Scene3dView::LightType::POINT_LIGHT, Vector3(-5, -5, 5), Vector3(1, 1, 1));
+
+    mWindow.Add(mScene3dView);
+    mScene3dView.PlayAnimations();
+  }
+
+  void SetCameraActor()
+  {
+    mCameraPosition = camera_position_list[mCurrentGlTF];
+    mCameraActor    = mWindow.GetRenderTaskList().GetTask(0).GetCameraActor();
+    mCameraActor.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+    mCameraActor.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+    mCameraActor.SetProperty(Dali::Actor::Property::POSITION, mCameraPosition);
+    mCameraActor.SetType(Dali::Camera::LOOK_AT_TARGET);
+    mCameraActor.SetNearClippingPlane(0.01);
+  }
+
+  void CreateSkybox()
+  {
+    struct Vertex
+    {
+      Vector3 aPosition;
+    };
+
+    Vertex skyboxVertices[] = {
+      // back
+      {Vector3(-1.0f, 1.0f, -1.0f)},
+      {Vector3(-1.0f, -1.0f, -1.0f)},
+      {Vector3(1.0f, -1.0f, -1.0f)},
+      {Vector3(1.0f, -1.0f, -1.0f)},
+      {Vector3(1.0f, 1.0f, -1.0f)},
+      {Vector3(-1.0f, 1.0f, -1.0f)},
+
+      // left
+      {Vector3(-1.0f, -1.0f, 1.0f)},
+      {Vector3(-1.0f, -1.0f, -1.0f)},
+      {Vector3(-1.0f, 1.0f, -1.0f)},
+      {Vector3(-1.0f, 1.0f, -1.0f)},
+      {Vector3(-1.0f, 1.0f, 1.0f)},
+      {Vector3(-1.0f, -1.0f, 1.0f)},
+
+      // right
+      {Vector3(1.0f, -1.0f, -1.0f)},
+      {Vector3(1.0f, -1.0f, 1.0f)},
+      {Vector3(1.0f, 1.0f, 1.0f)},
+      {Vector3(1.0f, 1.0f, 1.0f)},
+      {Vector3(1.0f, 1.0f, -1.0f)},
+      {Vector3(1.0f, -1.0f, -1.0f)},
+
+      // front
+      {Vector3(-1.0f, -1.0f, 1.0f)},
+      {Vector3(-1.0f, 1.0f, 1.0f)},
+      {Vector3(1.0f, 1.0f, 1.0f)},
+      {Vector3(1.0f, 1.0f, 1.0f)},
+      {Vector3(1.0f, -1.0f, 1.0f)},
+      {Vector3(-1.0f, -1.0f, 1.0f)},
+
+      // botton
+      {Vector3(-1.0f, 1.0f, -1.0f)},
+      {Vector3(1.0f, 1.0f, -1.0f)},
+      {Vector3(1.0f, 1.0f, 1.0f)},
+      {Vector3(1.0f, 1.0f, 1.0f)},
+      {Vector3(-1.0f, 1.0f, 1.0f)},
+      {Vector3(-1.0f, 1.0f, -1.0f)},
+
+      // top
+      {Vector3(-1.0f, -1.0f, -1.0f)},
+      {Vector3(-1.0f, -1.0f, 1.0f)},
+      {Vector3(1.0f, -1.0f, -1.0f)},
+      {Vector3(1.0f, -1.0f, -1.0f)},
+      {Vector3(-1.0f, -1.0f, 1.0f)},
+      {Vector3(1.0f, -1.0f, 1.0f)}};
+
+
+    const std::string currentVShaderFile(VERTEX_SHADER_URL);
+    const std::string currentFShaderFile(FRAGMENT_SHADER_URL);
+
+    mShaderSkybox = LoadShaders(currentVShaderFile, currentFShaderFile);
+
+    Dali::VertexBuffer vertexBuffer = Dali::VertexBuffer::New(Property::Map()
+                                                                .Add("aPosition", Property::VECTOR3));
+    vertexBuffer.SetData(skyboxVertices, sizeof(skyboxVertices) / sizeof(Vertex));
+
+    mSkyboxGeometry = Geometry::New();
+    mSkyboxGeometry.AddVertexBuffer(vertexBuffer);
+    mSkyboxGeometry.SetType(Geometry::TRIANGLES);
+
+    // Diffuse Cube Map
+    Devel::PixelBuffer diffusePixelBuffer = LoadImageFromFile(uri_diffuse_texture);
+    int32_t            diffuseFaceSize    = diffusePixelBuffer.GetWidth() / 4;
+    Texture            texture            = Texture::New(TextureType::TEXTURE_CUBE, diffusePixelBuffer.GetPixelFormat(), diffuseFaceSize, diffuseFaceSize);
+    for(int32_t i = 0; i < 6; ++i)
+    {
+      UploadTextureFace(texture, diffusePixelBuffer, i);
+    }
+    texture.GenerateMipmaps();
+
+    mSkyboxTextures = TextureSet::New();
+    mSkyboxTextures.SetTexture(0, texture);
+
+    mSkyboxRenderer = Renderer::New(mSkyboxGeometry, mShaderSkybox);
+    mSkyboxRenderer.SetTextures(mSkyboxTextures);
+    mSkyboxRenderer.SetProperty(Renderer::Property::DEPTH_INDEX, 2.0f);
+
+    // Enables the depth test.
+    mSkyboxRenderer.SetProperty(Renderer::Property::DEPTH_TEST_MODE, DepthTestMode::ON);
+
+    // The fragment shader will run only is those pixels that have the max depth value.
+    mSkyboxRenderer.SetProperty(Renderer::Property::DEPTH_FUNCTION, DepthFunction::LESS_EQUAL);
+
+    mSkyboxActor = Actor::New();
+    mSkyboxActor.SetProperty(Dali::Actor::Property::NAME, "SkyBox");
+    mSkyboxActor.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+    mSkyboxActor.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+    mSkyboxActor.SetProperty(Dali::Actor::Property::POSITION, mCameraPosition);
+    mSkyboxActor.AddRenderer(mSkyboxRenderer);
+    mWindow.Add(mSkyboxActor);
+  }
+
+  void SetAnimation()
+  {
+    /**
+     * Rotate object Actor along Y axis.
+     * Animation duration is 8 seconds.
+     * Five keyframes are set for each 90 degree. i.e., 0, 90, 180, 270, and 360.
+     * Each keyframes are interpolated by linear interpolator.
+     */
+    mAnimation                = Animation::New(8.0);
+    KeyFrames keyframes       = KeyFrames::New();
+    float     lengthAnimation = 0.25;
+    for(int32_t i = 0; i < 5; ++i)
+    {
+      keyframes.Add(i * lengthAnimation, Quaternion(Degree(i * 90.0), Vector3::YAXIS));
+    }
+    mAnimation.AnimateBetween(Property(mScene3dView, Dali::Actor::Property::ORIENTATION), keyframes, Animation::Interpolation::LINEAR);
+    mAnimation.SetLooping(true);
+    mAnimation.Play();
+  }
+
+  uint8_t* CropBuffer(uint8_t* sourceBuffer, uint32_t bytesPerPixel, uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset, uint32_t xFaceSize, uint32_t yFaceSize)
+  {
+    if(xOffset + xFaceSize > width || yOffset + yFaceSize > height)
+    {
+      DALI_LOG_ERROR("Can not crop outside of texture area.\n");
+      return nullptr;
+    }
+    uint32_t byteSize   = bytesPerPixel * xFaceSize * yFaceSize;
+    uint8_t* destBuffer = reinterpret_cast<uint8_t*>(malloc(byteSize + 4u));
+
+    int32_t srcStride  = width * bytesPerPixel;
+    int32_t destStride = xFaceSize * bytesPerPixel;
+    int32_t srcOffset  = xOffset * bytesPerPixel + yOffset * srcStride;
+    int32_t destOffset = 0;
+    for(uint16_t row = yOffset; row < yOffset + yFaceSize; ++row)
+    {
+      memcpy(destBuffer + destOffset, sourceBuffer + srcOffset, destStride);
+      srcOffset += srcStride;
+      destOffset += destStride;
+    }
+
+    return destBuffer;
+  }
+
+  void UploadTextureFace(Texture& texture, Devel::PixelBuffer pixelBuffer, int32_t faceIndex)
+  {
+    uint8_t* imageBuffer   = pixelBuffer.GetBuffer();
+    uint32_t bytesPerPixel = Pixel::GetBytesPerPixel(pixelBuffer.GetPixelFormat());
+    uint32_t imageWidth    = pixelBuffer.GetWidth();
+    uint32_t imageHeight   = pixelBuffer.GetHeight();
+
+    int32_t faceSize = imageWidth / 4;
+
+    uint32_t xOffset = cubeMap_index_x[faceIndex] * faceSize;
+    uint32_t yOffset = cubeMap_index_y[faceIndex] * faceSize;
+
+    uint8_t*  tempImageBuffer = CropBuffer(imageBuffer, bytesPerPixel, imageWidth, imageHeight, xOffset, yOffset, faceSize, faceSize);
+    if(tempImageBuffer)
+    {
+      PixelData pixelData       = PixelData::New(tempImageBuffer, faceSize * faceSize * bytesPerPixel, faceSize, faceSize, pixelBuffer.GetPixelFormat(), PixelData::FREE);
+      texture.Upload(pixelData, CubeMapLayer::POSITIVE_X + faceIndex, 0, 0, 0, faceSize, faceSize);
+    }
+  }
+
+  void ChangeModel(int32_t direction)
+  {
+    mCurrentGlTF += direction;
+    if(mCurrentGlTF >= NUM_OF_GLTF_MODELS)
+    {
+      mCurrentGlTF = 0;
+    }
+    if(mCurrentGlTF < 0)
+    {
+      mCurrentGlTF = NUM_OF_GLTF_MODELS - 1;
+    }
+    CreateSceneFromGLTF(gltf_list[mCurrentGlTF]);
+    mCameraPosition = camera_position_list[mCurrentGlTF];
+    mCameraActor.SetProperty(Dali::Actor::Property::POSITION, mCameraPosition);
+    if(mCurrentGlTF == GLTF_LANTERN)
+    {
+      mCameraActor.SetTargetPosition(Vector3(0.0, -15.0, 0.0));
+    }
+    else
+    {
+      mCameraActor.SetTargetPosition(Vector3::ZERO);
+    }
+    mSkyboxActor.SetProperty(Dali::Actor::Property::POSITION, mCameraPosition);
+    SetAnimation();
+    mAnimationStop = false;
+    mWheelDelta = 1.0f;
+  }
+
+  /**
+   * This function will change the material Roughness, Metalness or the model orientation when touched
+   */
+  bool OnTouch(Actor actor, const TouchEvent& touch)
+  {
+    const PointState::Type state = touch.GetState(0);
+
+    switch(state)
+    {
+      case PointState::DOWN:
+      {
+        if(mDoubleTap)
+        {
+          ChangeModel(1);
+        }
+        mDoubleTapTime.Stop();
+
+        mPointZ = touch.GetScreenPosition(0);
+        if(!mAnimationStop)
+        {
+          mAnimation.Pause();
+        }
+        break;
+      }
+
+      case PointState::MOTION:
+      {
+        const Size    size   = mWindow.GetSize();
+        const float   scaleX = size.width;
+        const float   scaleY = size.height;
+        const Vector2 point  = touch.GetScreenPosition(0);
+        mProcess             = false;
+        // If the touch is not processed above, then change the model orientation
+        if(!mProcess)
+        {
+          /**
+           * This is the motion for the swipe to rotate camera that targeting Vector3::ZERO.
+           * Each quaternion is used to rotate camera by Pitch and Yaw respectively.
+           * Final Orientation of camera is combination of Pitch and Yaw quaternion.
+           * For the natural rendering, Skybox also relocated at the new camera position.
+           */
+          mProcess           = true;
+          const float angle1 = ((mPointZ.y - point.y) / scaleY);
+          const float angle2 = ((mPointZ.x - point.x) / scaleX);
+
+          Quaternion pitch(Radian(Degree(angle1 * -200.0f)), (mCameraPosition.z >= 0) ? Vector3::XAXIS : -Vector3::XAXIS);
+          Quaternion yaw(Radian(Degree(angle2 * -200.0f)), -Vector3::YAXIS);
+
+          Quaternion newModelOrientation = yaw * pitch;
+          mCameraPosition                = newModelOrientation.Rotate(mCameraPosition);
+          mCameraActor.SetProperty(Dali::Actor::Property::POSITION, mCameraPosition);
+          mSkyboxActor.SetProperty(Dali::Actor::Property::POSITION, mCameraPosition);
+
+          mPointZ = point;
+        }
+        break;
+      }
+
+      case PointState::UP:
+      {
+        mDoubleTapTime.Start();
+        mDoubleTap = true;
+        if(!mAnimationStop)
+        {
+          mAnimation.Play();
+        }
+        mProcess = false;
+        break;
+      }
+
+      default:
+      {
+        break;
+      }
+    }
+    return true;
+  }
+
+  void OnKeyEvent(const KeyEvent& event)
+  {
+    if(event.GetState() == KeyEvent::DOWN)
+    {
+      if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK))
+      {
+        mApplication.Quit();
+      }
+      if(event.GetKeyName() == "Down" ||
+         event.GetKeyName() == "Up")
+      {
+        if(!mProcess)
+        {
+          if(mAnimationStop)
+          {
+            mAnimation.Play();
+          }
+          else
+          {
+            mAnimation.Pause();
+          }
+          mAnimationStop = !mAnimationStop;
+        }
+      }
+
+      if(IsKey(event, Dali::DALI_KEY_CURSOR_RIGHT))
+      {
+        ChangeModel(1);
+      }
+
+      if(IsKey(event, Dali::DALI_KEY_CURSOR_LEFT))
+      {
+        ChangeModel(-1);
+      }
+    }
+  }
+
+private:
+  Window       mWindow;
+  Layer        mLayer3D;
+  Application& mApplication;
+  CameraActor  mCameraActor;
+  Dali::Timer  mTimer;
+
+  Vector3     mCameraPosition;
+  Scene3dView mScene3dView;
+
+  Vector2    mPointZ;
+  Quaternion mModelOrientation;
+
+  Shader     mShaderSkybox;
+  Geometry   mSkyboxGeometry;
+  TextureSet mSkyboxTextures;
+  Renderer   mSkyboxRenderer;
+  Actor      mSkyboxActor;
+
+  Animation mAnimation;
+  bool      mProcess;
+  bool      mAnimationStop;
+
+  Timer mDoubleTapTime;
+  bool  mDoubleTap;
+
+  float mWheelDelta{1.0f};
+
+  int32_t mCurrentGlTF;
+};
+
+int32_t DALI_EXPORT_API main(int32_t argc, char** argv)
+{
+  Application               application = Application::New(&argc, &argv);
+  Scene3dViewController test(application);
+  application.MainLoop();
+  return 0;
+}
diff --git a/resources/images/BoomBox_baseColor.png b/resources/images/BoomBox_baseColor.png
new file mode 100644 (file)
index 0000000..992429d
Binary files /dev/null and b/resources/images/BoomBox_baseColor.png differ
diff --git a/resources/images/BoomBox_emissive.png b/resources/images/BoomBox_emissive.png
new file mode 100644 (file)
index 0000000..315a499
Binary files /dev/null and b/resources/images/BoomBox_emissive.png differ
diff --git a/resources/images/BoomBox_normal.png b/resources/images/BoomBox_normal.png
new file mode 100644 (file)
index 0000000..19d7afb
Binary files /dev/null and b/resources/images/BoomBox_normal.png differ
diff --git a/resources/images/BoomBox_occlusionRoughnessMetallic.png b/resources/images/BoomBox_occlusionRoughnessMetallic.png
new file mode 100644 (file)
index 0000000..25b5b95
Binary files /dev/null and b/resources/images/BoomBox_occlusionRoughnessMetallic.png differ
diff --git a/resources/images/Default_AO.jpg b/resources/images/Default_AO.jpg
new file mode 100644 (file)
index 0000000..419f628
Binary files /dev/null and b/resources/images/Default_AO.jpg differ
diff --git a/resources/images/Default_albedo.jpg b/resources/images/Default_albedo.jpg
new file mode 100644 (file)
index 0000000..15d6485
Binary files /dev/null and b/resources/images/Default_albedo.jpg differ
diff --git a/resources/images/Default_emissive.jpg b/resources/images/Default_emissive.jpg
new file mode 100644 (file)
index 0000000..2de59e8
Binary files /dev/null and b/resources/images/Default_emissive.jpg differ
diff --git a/resources/images/Default_metalRoughness.jpg b/resources/images/Default_metalRoughness.jpg
new file mode 100755 (executable)
index 0000000..04874cb
Binary files /dev/null and b/resources/images/Default_metalRoughness.jpg differ
diff --git a/resources/images/Default_normal.jpg b/resources/images/Default_normal.jpg
new file mode 100644 (file)
index 0000000..da887a1
Binary files /dev/null and b/resources/images/Default_normal.jpg differ
diff --git a/resources/images/Lantern_baseColor.png b/resources/images/Lantern_baseColor.png
new file mode 100644 (file)
index 0000000..013ec22
Binary files /dev/null and b/resources/images/Lantern_baseColor.png differ
diff --git a/resources/images/Lantern_emissive.png b/resources/images/Lantern_emissive.png
new file mode 100644 (file)
index 0000000..e1878ca
Binary files /dev/null and b/resources/images/Lantern_emissive.png differ
diff --git a/resources/images/Lantern_normal.png b/resources/images/Lantern_normal.png
new file mode 100644 (file)
index 0000000..5818db9
Binary files /dev/null and b/resources/images/Lantern_normal.png differ
diff --git a/resources/images/Lantern_roughnessMetallic.png b/resources/images/Lantern_roughnessMetallic.png
new file mode 100644 (file)
index 0000000..769132d
Binary files /dev/null and b/resources/images/Lantern_roughnessMetallic.png differ
diff --git a/resources/images/MC_Default_AO.jpg b/resources/images/MC_Default_AO.jpg
new file mode 100644 (file)
index 0000000..fb8bd77
Binary files /dev/null and b/resources/images/MC_Default_AO.jpg differ
diff --git a/resources/images/MC_Default_albedo.jpg b/resources/images/MC_Default_albedo.jpg
new file mode 100644 (file)
index 0000000..e0f03c2
Binary files /dev/null and b/resources/images/MC_Default_albedo.jpg differ
diff --git a/resources/images/MC_Default_metalRoughness.jpg b/resources/images/MC_Default_metalRoughness.jpg
new file mode 100644 (file)
index 0000000..c0bca20
Binary files /dev/null and b/resources/images/MC_Default_metalRoughness.jpg differ
diff --git a/resources/images/MC_Default_normal.jpg b/resources/images/MC_Default_normal.jpg
new file mode 100644 (file)
index 0000000..97913fe
Binary files /dev/null and b/resources/images/MC_Default_normal.jpg differ
diff --git a/resources/images/forest_diffuse_cubemap.png b/resources/images/forest_diffuse_cubemap.png
new file mode 100644 (file)
index 0000000..ff3e237
Binary files /dev/null and b/resources/images/forest_diffuse_cubemap.png differ
diff --git a/resources/images/forest_specular_cubemap.png b/resources/images/forest_specular_cubemap.png
new file mode 100644 (file)
index 0000000..d5cb909
Binary files /dev/null and b/resources/images/forest_specular_cubemap.png differ
diff --git a/resources/models/BoomBox.bin b/resources/models/BoomBox.bin
new file mode 100644 (file)
index 0000000..759f0e6
Binary files /dev/null and b/resources/models/BoomBox.bin differ
diff --git a/resources/models/BoomBox.gltf b/resources/models/BoomBox.gltf
new file mode 100644 (file)
index 0000000..51c03ff
--- /dev/null
@@ -0,0 +1,172 @@
+{
+  "accessors": [
+    {
+      "bufferView": 0,
+      "componentType": 5126,
+      "count": 3575,
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 1,
+      "componentType": 5126,
+      "count": 3575,
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "componentType": 5126,
+      "count": 3575,
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 3,
+      "componentType": 5126,
+      "count": 3575,
+      "type": "VEC3",
+      "max": [
+        0.009921154,
+        0.00977163,
+        0.0100762453
+      ],
+      "min": [
+        -0.009921154,
+        -0.00977163,
+        -0.0100762453
+      ]
+    },
+    {
+      "bufferView": 4,
+      "componentType": 5123,
+      "count": 18108,
+      "type": "SCALAR"
+    }
+  ],
+  "asset": {
+    "generator": "glTF Tools for Unity",
+    "version": "2.0"
+  },
+  "bufferViews": [
+    {
+      "buffer": 0,
+      "byteLength": 28600
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 28600,
+      "byteLength": 42900
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 71500,
+      "byteLength": 57200
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 128700,
+      "byteLength": 42900
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 171600,
+      "byteLength": 36216
+    }
+  ],
+  "buffers": [
+    {
+      "uri": "BoomBox.bin",
+      "byteLength": 207816
+    }
+  ],
+  "images": [
+    {
+      "uri": "../images/BoomBox_baseColor.png"
+    },
+    {
+      "uri": "../images/BoomBox_occlusionRoughnessMetallic.png"
+    },
+    {
+      "uri": "../images/BoomBox_normal.png"
+    },
+    {
+      "uri": "../images/BoomBox_emissive.png"
+    }
+  ],
+  "meshes": [
+    {
+      "primitives": [
+        {
+          "attributes": {
+            "TEXCOORD_0": 0,
+            "NORMAL": 1,
+            "TANGENT": 2,
+            "POSITION": 3
+          },
+          "indices": 4,
+          "material": 0
+        }
+      ],
+      "name": "BoomBox"
+    }
+  ],
+  "materials": [
+    {
+      "pbrMetallicRoughness": {
+        "baseColorTexture": {
+          "index": 0
+        },
+        "metallicRoughnessTexture": {
+          "index": 1
+        }
+      },
+      "normalTexture": {
+        "index": 2
+      },
+      "occlusionTexture": {
+        "index": 1
+      },
+      "emissiveFactor": [
+        1.0,
+        1.0,
+        1.0
+      ],
+      "emissiveTexture": {
+        "index": 3
+      },
+      "name": "BoomBox_Mat"
+    }
+  ],
+  "nodes": [
+    {
+      "mesh": 0,
+      "rotation": [
+        0.0,
+        1.0,
+        0.0,
+        0.0
+      ],
+      "name": "BoomBox"
+    }
+  ],
+  "scene": 0,
+  "scenes": [
+    {
+      "nodes": [
+        0
+      ]
+    }
+  ],
+  "textures": [
+    {
+      "source": 0
+    },
+    {
+      "source": 1
+    },
+    {
+      "source": 2
+    },
+    {
+      "source": 3
+    }
+  ]
+}
diff --git a/resources/models/BoxAnimated.gltf b/resources/models/BoxAnimated.gltf
new file mode 100644 (file)
index 0000000..d40924e
--- /dev/null
@@ -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/resources/models/BoxAnimated0.bin b/resources/models/BoxAnimated0.bin
new file mode 100644 (file)
index 0000000..2e4ef6e
Binary files /dev/null and b/resources/models/BoxAnimated0.bin differ
diff --git a/resources/models/DamagedHelmet.bin b/resources/models/DamagedHelmet.bin
new file mode 100644 (file)
index 0000000..6fea01e
Binary files /dev/null and b/resources/models/DamagedHelmet.bin differ
diff --git a/resources/models/DamagedHelmet.gltf b/resources/models/DamagedHelmet.gltf
new file mode 100644 (file)
index 0000000..f788375
--- /dev/null
@@ -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": "../images/Default_albedo.jpg"
+               },
+               {
+                       "uri": "../images/Default_metalRoughness.jpg"
+               },
+               {
+                       "uri": "../images/Default_normal.jpg"
+               },
+               {
+                       "uri": "../images/Default_emissive.jpg"
+               },
+               {
+                       "uri": "../images/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/resources/models/Lantern.bin b/resources/models/Lantern.bin
new file mode 100644 (file)
index 0000000..b3c3c59
Binary files /dev/null and b/resources/models/Lantern.bin differ
diff --git a/resources/models/Lantern.gltf b/resources/models/Lantern.gltf
new file mode 100644 (file)
index 0000000..3c6513f
--- /dev/null
@@ -0,0 +1,361 @@
+{
+  "accessors": [
+    {
+      "bufferView": 0,
+      "componentType": 5126,
+      "count": 926,
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 1,
+      "componentType": 5126,
+      "count": 926,
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "componentType": 5126,
+      "count": 926,
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 3,
+      "componentType": 5126,
+      "count": 926,
+      "type": "VEC3",
+      "max": [
+        7.74559927,
+        12.8321095,
+        2.31570983
+      ],
+      "min": [
+        -7.74559927,
+        -12.8321095,
+        -2.31570983
+      ]
+    },
+    {
+      "bufferView": 4,
+      "componentType": 5123,
+      "count": 2616,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 5,
+      "componentType": 5126,
+      "count": 756,
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 6,
+      "componentType": 5126,
+      "count": 756,
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 7,
+      "componentType": 5126,
+      "count": 756,
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 8,
+      "componentType": 5126,
+      "count": 756,
+      "type": "VEC3",
+      "max": [
+        0.129208073,
+        0.6523504,
+        0.129208073
+      ],
+      "min": [
+        -0.129208073,
+        -0.6523504,
+        -0.129208073
+      ]
+    },
+    {
+      "bufferView": 9,
+      "componentType": 5123,
+      "count": 3744,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 10,
+      "componentType": 5126,
+      "count": 2463,
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 11,
+      "componentType": 5126,
+      "count": 2463,
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 12,
+      "componentType": 5126,
+      "count": 2463,
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 13,
+      "componentType": 5126,
+      "count": 2463,
+      "type": "VEC3",
+      "max": [
+        1.03408229,
+        2.529281,
+        1.03408468
+      ],
+      "min": [
+        -1.03408229,
+        -2.529281,
+        -1.03408468
+      ]
+    },
+    {
+      "bufferView": 14,
+      "componentType": 5123,
+      "count": 9822,
+      "type": "SCALAR"
+    }
+  ],
+  "asset": {
+    "generator": "glTF Tools for Unity",
+    "version": "2.0"
+  },
+  "bufferViews": [
+    {
+      "buffer": 0,
+      "byteLength": 7408
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 7408,
+      "byteLength": 11112
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 18520,
+      "byteLength": 14816
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 33336,
+      "byteLength": 11112
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 44448,
+      "byteLength": 5232
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 49680,
+      "byteLength": 6048
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 55728,
+      "byteLength": 9072
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 64800,
+      "byteLength": 12096
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 76896,
+      "byteLength": 9072
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 85968,
+      "byteLength": 7488
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 93456,
+      "byteLength": 19704
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 113160,
+      "byteLength": 29556
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 142716,
+      "byteLength": 39408
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 182124,
+      "byteLength": 29556
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 211680,
+      "byteLength": 19644
+    }
+  ],
+  "buffers": [
+    {
+      "uri": "Lantern.bin",
+      "byteLength": 231324
+    }
+  ],
+  "images": [
+    {
+      "uri": "../images/Lantern_baseColor.png"
+    },
+    {
+      "uri": "../images/Lantern_roughnessMetallic.png"
+    },
+    {
+      "uri": "../images/Lantern_normal.png"
+    },
+    {
+      "uri": "../images/Lantern_emissive.png"
+    }
+  ],
+  "meshes": [
+    {
+      "primitives": [
+        {
+          "attributes": {
+            "TEXCOORD_0": 0,
+            "NORMAL": 1,
+            "TANGENT": 2,
+            "POSITION": 3
+          },
+          "indices": 4,
+          "material": 0
+        }
+      ],
+      "name": "LanternPole_Body"
+    },
+    {
+      "primitives": [
+        {
+          "attributes": {
+            "TEXCOORD_0": 5,
+            "NORMAL": 6,
+            "TANGENT": 7,
+            "POSITION": 8
+          },
+          "indices": 9,
+          "material": 0
+        }
+      ],
+      "name": "LanternPole_Chain"
+    },
+    {
+      "primitives": [
+        {
+          "attributes": {
+            "TEXCOORD_0": 10,
+            "NORMAL": 11,
+            "TANGENT": 12,
+            "POSITION": 13
+          },
+          "indices": 14,
+          "material": 0
+        }
+      ],
+      "name": "LanternPole_Lantern"
+    }
+  ],
+  "materials": [
+    {
+      "pbrMetallicRoughness": {
+        "baseColorTexture": {
+          "index": 0
+        },
+        "metallicRoughnessTexture": {
+          "index": 1
+        }
+      },
+      "normalTexture": {
+        "index": 2
+      },
+      "emissiveFactor": [
+        1.0,
+        1.0,
+        1.0
+      ],
+      "emissiveTexture": {
+        "index": 3
+      },
+      "name": "LanternPost_Mat"
+    }
+  ],
+  "nodes": [
+    {
+      "mesh": 0,
+      "translation": [
+        -3.82315421,
+        13.01603,
+        0.0
+      ],
+      "name": "LanternPole_Body"
+    },
+    {
+      "mesh": 1,
+      "translation": [
+        -9.582001,
+        21.0378723,
+        0.0
+      ],
+      "name": "LanternPole_Chain"
+    },
+    {
+      "mesh": 2,
+      "translation": [
+        -9.582007,
+        18.0091515,
+        0.0
+      ],
+      "name": "LanternPole_Lantern"
+    },
+    {
+      "children": [
+        0,
+        1,
+        2
+      ],
+      "rotation": [
+        0.0,
+        1.0,
+        0.0,
+        0.0
+      ],
+      "name": "Lantern"
+    }
+  ],
+  "scene": 0,
+  "scenes": [
+    {
+      "nodes": [
+        3
+      ]
+    }
+  ],
+  "textures": [
+    {
+      "source": 0
+    },
+    {
+      "source": 1
+    },
+    {
+      "source": 2
+    },
+    {
+      "source": 3
+    }
+  ]
+}
+
diff --git a/resources/models/microphone.bin b/resources/models/microphone.bin
new file mode 100644 (file)
index 0000000..004a22b
Binary files /dev/null and b/resources/models/microphone.bin differ
diff --git a/resources/models/microphone.gltf b/resources/models/microphone.gltf
new file mode 100644 (file)
index 0000000..55adaad
--- /dev/null
@@ -0,0 +1,1263 @@
+{
+       "asset": {
+               "generator": "Unity 2017.1.0f3",
+               "extras": {
+                       "exporterVersion" : "2.2.0"
+               },
+               "version": "2.0"
+       },
+       "accessors": [
+               {
+                       "bufferView": 2,
+                       "byteOffset": 0,
+                       "componentType": 5126,
+                       "count": 184,
+                       "max": [ -0.0817542, -0.224084, 0.0803633 ],
+                       "min": [ -0.316637, -0.36088, -0.0803632 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 2208,
+                       "componentType": 5126,
+                       "count": 184,
+                       "max": [ 1, 1, 1 ],
+                       "min": [ -1, -1, -1 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 0,
+                       "componentType": 5126,
+                       "count": 184,
+                       "max": [ 0.773264, 0.79832 ],
+                       "min": [ 0.0820783, 0.00694232 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 0,
+                       "componentType": 5126,
+                       "count": 184,
+                       "max": [ 1, 0.007775896, 1, 1 ],
+                       "min": [ -1, -0.008950601, -1, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 0,
+                       "componentType": 5123,
+                       "count": 480,
+                       "max": [ 183 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 4416,
+                       "componentType": 5126,
+                       "count": 208,
+                       "max": [ -0.170105, -0.211712, 0.0782913 ],
+                       "min": [ -0.513871, -0.372438, -0.0782913 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 6912,
+                       "componentType": 5126,
+                       "count": 208,
+                       "max": [ 1, 1, 1 ],
+                       "min": [ -1, -1, -1 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 1472,
+                       "componentType": 5126,
+                       "count": 208,
+                       "max": [ 0.94562, 0.808942 ],
+                       "min": [ 0.117983, 0.00694233 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 2944,
+                       "componentType": 5126,
+                       "count": 208,
+                       "max": [ 1, 0.001152919, 1, 1 ],
+                       "min": [ -1, -0.0008564484, -1, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 960,
+                       "componentType": 5123,
+                       "count": 588,
+                       "max": [ 207 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 9408,
+                       "componentType": 5126,
+                       "count": 108,
+                       "max": [ -0.433378, -0.197503, 0.0350562 ],
+                       "min": [ -0.505399, -0.386648, -0.0358708 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 10704,
+                       "componentType": 5126,
+                       "count": 108,
+                       "max": [ 1, 0.9587942, 0.9848078 ],
+                       "min": [ -1, -0.9587944, -0.9848078 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 3136,
+                       "componentType": 5126,
+                       "count": 108,
+                       "max": [ 0.636155, 0.300265 ],
+                       "min": [ 0.589238, 0.244814 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 6272,
+                       "componentType": 5126,
+                       "count": 108,
+                       "max": [ 0, 0.9986785, 0.4082537, 1 ],
+                       "min": [ -0.9987717, -0.998679, -0.4565848, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 2136,
+                       "componentType": 5123,
+                       "count": 528,
+                       "max": [ 107 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 12000,
+                       "componentType": 5126,
+                       "count": 56,
+                       "max": [ -0.444654, -0.0910281, 0.0243592 ],
+                       "min": [ -0.494124, -0.197503, -0.0243592 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 12672,
+                       "componentType": 5126,
+                       "count": 56,
+                       "max": [ 1, 1, 0.9848078 ],
+                       "min": [ -1, 0, -0.984808 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 4000,
+                       "componentType": 5126,
+                       "count": 56,
+                       "max": [ 0.396955, 0.510041 ],
+                       "min": [ 0.310973, 0.473709 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 8000,
+                       "componentType": 5126,
+                       "count": 56,
+                       "max": [ 0.9848078, 0.0004021518, 1, 1 ],
+                       "min": [ -1, 0, -1, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 3192,
+                       "componentType": 5123,
+                       "count": 156,
+                       "max": [ 55 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 13344,
+                       "componentType": 5126,
+                       "count": 198,
+                       "max": [ -0.429546, -0.21424, 0.0769242 ],
+                       "min": [ -0.890857, -0.36991, -0.0763811 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 15720,
+                       "componentType": 5126,
+                       "count": 198,
+                       "max": [ 1, 1, 0.9848078 ],
+                       "min": [ -1, -1, -0.9848078 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 4448,
+                       "componentType": 5126,
+                       "count": 198,
+                       "max": [ 0.989407, 0.771639 ],
+                       "min": [ 0.117983, 0.365993 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 8896,
+                       "componentType": 5126,
+                       "count": 198,
+                       "max": [ 0.991911, 0.9848082, 1, 1 ],
+                       "min": [ -1, -0.9848082, -1, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 3504,
+                       "componentType": 5123,
+                       "count": 714,
+                       "max": [ 197 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 18096,
+                       "componentType": 5126,
+                       "count": 70,
+                       "max": [ 0.631789, 1, 0.0311748 ],
+                       "min": [ 0.149872, 0.38741, -0.0314196 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 18936,
+                       "componentType": 5126,
+                       "count": 70,
+                       "max": [ 0.9999994, 0.9944298, 0.9974802 ],
+                       "min": [ -0.9999994, -0.99514, -0.9974803 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 6032,
+                       "componentType": 5126,
+                       "count": 70,
+                       "max": [ 0.614058, 0.102646 ],
+                       "min": [ 0.0820783, 0.0383593 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 12064,
+                       "componentType": 5126,
+                       "count": 70,
+                       "max": [ 0.99514, 1, 0.0263389, 1 ],
+                       "min": [ -0.9982011, -1, -0.0264513, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 4932,
+                       "componentType": 5123,
+                       "count": 270,
+                       "max": [ 69 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 19776,
+                       "componentType": 5126,
+                       "count": 432,
+                       "max": [ 0.58512, 0.0328655, 0.192726 ],
+                       "min": [ 0.196135, -0.262642, -0.192726 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 24960,
+                       "componentType": 5126,
+                       "count": 432,
+                       "max": [ 0.9364122, 0.9848062, 0.9364373 ],
+                       "min": [ -0.9364122, -0.9848317, -0.9364373 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 6592,
+                       "componentType": 5126,
+                       "count": 432,
+                       "max": [ 0.635558, 0.537825 ],
+                       "min": [ 0.117983, 0.276231 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 13184,
+                       "componentType": 5126,
+                       "count": 432,
+                       "max": [ 0.9571099, 0.4475751, 0.9569672, 1 ],
+                       "min": [ -0.9572403, -0.447499, -0.9570593, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 5472,
+                       "componentType": 5123,
+                       "count": 2112,
+                       "max": [ 431 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 30144,
+                       "componentType": 5126,
+                       "count": 653,
+                       "max": [ 0.66353, 0.396858, 0.272912 ],
+                       "min": [ 0.118131, -1, -0.272487 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 37980,
+                       "componentType": 5126,
+                       "count": 653,
+                       "max": [ 1, 0.9585828, 1 ],
+                       "min": [ -1, -1, -1 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 10048,
+                       "componentType": 5126,
+                       "count": 653,
+                       "max": [ 0.915243, 0.985558 ],
+                       "min": [ 0.073102, 0.505126 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 20096,
+                       "componentType": 5126,
+                       "count": 653,
+                       "max": [ 0.9996818, 0.9990966, 0.999458, 1 ],
+                       "min": [ -1, -0.9990914, -0.9968502, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 9696,
+                       "componentType": 5123,
+                       "count": 3354,
+                       "max": [ 652 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 45816,
+                       "componentType": 5126,
+                       "count": 1056,
+                       "max": [ 0.660069, 0.0790365, 0.266436 ],
+                       "min": [ 0.121187, -0.321397, -0.266436 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 58488,
+                       "componentType": 5126,
+                       "count": 1056,
+                       "max": [ 1, 1, 1 ],
+                       "min": [ -1, -1, -1 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 15272,
+                       "componentType": 5126,
+                       "count": 1056,
+                       "max": [ 0.985171, 0.99269 ],
+                       "min": [ 0.0461732, 0.119146 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 30544,
+                       "componentType": 5126,
+                       "count": 1056,
+                       "max": [ 1, 0.0004414439, 1, 1 ],
+                       "min": [ -1, 0, -1, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 16404,
+                       "componentType": 5123,
+                       "count": 2880,
+                       "max": [ 1055 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 71160,
+                       "componentType": 5126,
+                       "count": 322,
+                       "max": [ 0.620647, 0.992694, 0.230028 ],
+                       "min": [ 0.161015, 0.38741, -0.229603 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 75024,
+                       "componentType": 5126,
+                       "count": 322,
+                       "max": [ 1, 0.9862869, 1 ],
+                       "min": [ -1, 0, -1 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 23720,
+                       "componentType": 5126,
+                       "count": 322,
+                       "max": [ 0.990318, 0.632431 ],
+                       "min": [ 0.117983, 0.123634 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 47440,
+                       "componentType": 5126,
+                       "count": 322,
+                       "max": [ 1, 0.9486126, 1, 1 ],
+                       "min": [ -1, -0.9486106, -1, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 22164,
+                       "componentType": 5123,
+                       "count": 1338,
+                       "max": [ 321 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 78888,
+                       "componentType": 5126,
+                       "count": 328,
+                       "max": [ 0.627749, 0.0766159, 0.235361 ],
+                       "min": [ 0.153507, -0.319665, -0.235361 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 82824,
+                       "componentType": 5126,
+                       "count": 328,
+                       "max": [ 0.9702838, 1, 0.9574561 ],
+                       "min": [ -0.9702838, -1, -0.9574561 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 26296,
+                       "componentType": 5126,
+                       "count": 328,
+                       "max": [ 0.964052, 0.974078 ],
+                       "min": [ 0.553333, 0.563472 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 52592,
+                       "componentType": 5126,
+                       "count": 328,
+                       "max": [ 0.9814231, 0.6945193, 0.970952, 1 ],
+                       "min": [ -0.9813312, -0.6945429, -0.9708325, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 24840,
+                       "componentType": 5123,
+                       "count": 1200,
+                       "max": [ 327 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 86760,
+                       "componentType": 5126,
+                       "count": 1264,
+                       "max": [ 0.887908, -0.148514, 0.49728 ],
+                       "min": [ -0.106652, -0.437391, -0.49728 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 101928,
+                       "componentType": 5126,
+                       "count": 1264,
+                       "max": [ 0.9998878, 0.9996067, 0.9998878 ],
+                       "min": [ -0.9998878, -0.9996114, -0.9998878 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 28920,
+                       "componentType": 5126,
+                       "count": 1264,
+                       "max": [ 0.981806, 0.975497 ],
+                       "min": [ 0.0820783, 0.00694232 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 57840,
+                       "componentType": 5126,
+                       "count": 1264,
+                       "max": [ 1, 0.9810975, 1, 1 ],
+                       "min": [ -1, -0.981091, -1, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 27240,
+                       "componentType": 5123,
+                       "count": 4944,
+                       "max": [ 1263 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 117096,
+                       "componentType": 5126,
+                       "count": 146,
+                       "max": [ -0.33147, -0.0868298, 0.00784655 ],
+                       "min": [ -0.607307, -0.158826, -0.00784655 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 118848,
+                       "componentType": 5126,
+                       "count": 146,
+                       "max": [ 0.9994461, 0.9994461, 1 ],
+                       "min": [ -0.9994461, -0.9994461, -1 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 39032,
+                       "componentType": 5126,
+                       "count": 146,
+                       "max": [ 0.565264, 0.371013 ],
+                       "min": [ 0.122472, 0.312136 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 78064,
+                       "componentType": 5126,
+                       "count": 146,
+                       "max": [ 1, 0.9994461, 0, 1 ],
+                       "min": [ -1, -0.9994461, 0, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 37128,
+                       "componentType": 5123,
+                       "count": 420,
+                       "max": [ 145 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 120600,
+                       "componentType": 5126,
+                       "count": 674,
+                       "max": [ 0.890857, -0.254185, 0.501005 ],
+                       "min": [ -0.109601, -0.329498, -0.501005 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 128688,
+                       "componentType": 5126,
+                       "count": 674,
+                       "max": [ 0.9933715, 0.9892086, 0.9933707 ],
+                       "min": [ -0.9933715, -0.9997857, -0.9933707 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 40200,
+                       "componentType": 5126,
+                       "count": 674,
+                       "max": [ 0.0704863, 0.998802 ],
+                       "min": [ 0.00577993, 0.00694233 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 80400,
+                       "componentType": 5126,
+                       "count": 674,
+                       "max": [ 0.9997864, 1, 0.9997799, 1 ],
+                       "min": [ -0.9997831, -0.9829271, -0.9997799, -1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 37968,
+                       "componentType": 5123,
+                       "count": 3120,
+                       "max": [ 673 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 136776,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.861304, 0.100931, 0.470876 ],
+                       "min": [ -0.0801546, -0.170364, -0.470495 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 140976,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.9651359, 0.9641696, 0.9657053 ],
+                       "min": [ -0.9651113, -0.9528841, -0.9646702 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 45592,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.628884, 0.0336521 ],
+                       "min": [ 0.073102, 0.00245418 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 91184,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.9828206, 0.6611547, 0.7089579, 1 ],
+                       "min": [ -0.4117271, -0.6623799, -0.9829004, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 44208,
+                       "componentType": 5123,
+                       "count": 1728,
+                       "max": [ 349 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 145176,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.85631, -0.413192, 0.464243 ],
+                       "min": [ -0.0773553, -0.668833, -0.469718 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 149376,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.9733593, 0.9414827, 0.9741633 ],
+                       "min": [ -0.9730278, -0.9563074, -0.9724148 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 48392,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.612346, 0.118934 ],
+                       "min": [ 0.0820783, 0.0652881 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 96784,
+                       "componentType": 5126,
+                       "count": 350,
+                       "max": [ 0.9832545, 0.6326413, 0.9823613, 1 ],
+                       "min": [ -0.7046706, -0.6376014, -0.5541882, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 47664,
+                       "componentType": 5123,
+                       "count": 1728,
+                       "max": [ 349 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 153576,
+                       "componentType": 5126,
+                       "count": 3648,
+                       "max": [ 0.687643, 0.191455, 0.296592 ],
+                       "min": [ 0.0936129, -0.725388, -0.296592 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 2,
+                       "byteOffset": 197352,
+                       "componentType": 5126,
+                       "count": 3648,
+                       "max": [ 0.9999975, 0.9999555, 0.9999975 ],
+                       "min": [ -0.9999975, -0.9999889, -0.9999975 ],
+                       "type": "VEC3"
+               },
+               {
+                       "bufferView": 1,
+                       "byteOffset": 51192,
+                       "componentType": 5126,
+                       "count": 3648,
+                       "max": [ 0.993015, 0.688439 ],
+                       "min": [ 0.0820783, 0.00694233 ],
+                       "type": "VEC2"
+               },
+               {
+                       "bufferView": 3,
+                       "byteOffset": 102384,
+                       "componentType": 5126,
+                       "count": 3648,
+                       "max": [ 0.999998, 0.9553282, 0.9999983, 1 ],
+                       "min": [ -0.999998, -0.9553282, -0.9999983, 1 ],
+                       "type": "VEC4"
+               },
+               {
+                       "bufferView": 0,
+                       "byteOffset": 51120,
+                       "componentType": 5123,
+                       "count": 17232,
+                       "max": [ 3647 ],
+                       "min": [ 0 ],
+                       "type": "SCALAR"
+               }
+       ],
+       "buffers": [
+               {
+                       "byteLength": 567840,
+                       "uri": "microphone.bin"
+               }
+       ],
+       "bufferViews": [
+               {
+                       "buffer": 0,
+                       "byteLength": 85584,
+                       "target": 34963,
+                       "byteOffset": 482256
+               },
+               {
+                       "buffer": 0,
+                       "byteLength": 80376,
+                       "target": 34962,
+                       "byteStride": 8,
+                       "byteOffset": 0
+               },
+               {
+                       "buffer": 0,
+                       "byteLength": 241128,
+                       "target": 34962,
+                       "byteStride": 12,
+                       "byteOffset": 80376
+               },
+               {
+                       "buffer": 0,
+                       "byteLength": 160752,
+                       "target": 34962,
+                       "byteStride": 16,
+                       "byteOffset": 321504
+               }
+       ],
+       "images": [
+               {
+                       "uri": "../images/MC_Default_albedo.jpg"
+               },
+               {
+                       "uri": "../images/MC_Default_metalRoughness.jpg"
+               },
+               {
+                       "uri": "../images/MC_Default_normal.jpg"
+               },
+               {
+                       "uri": "../images/MC_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" : 1
+                       },
+                       "emissiveFactor": [0, 0, 0],
+                       "occlusionTexture" : {
+                               "index" : 3,
+                               "texCoord" : 0,
+                               "strength" : 1
+                       },
+                       "doubleSided": false,
+                       "name": "01___Default"
+               }
+       ],
+       "meshes": [
+               {
+                       "name": "mesh_artic1_lp_10752artic1_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 0,
+                                               "NORMAL": 1,
+                                               "TEXCOORD_0": 2,
+                                               "TANGENT": 3
+                                       },
+                                       "indices": 4,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_artic2_lp_10754artic2_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 5,
+                                               "NORMAL": 6,
+                                               "TEXCOORD_0": 7,
+                                               "TANGENT": 8
+                                       },
+                                       "indices": 9,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_artic4_lp_10756artic4_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 10,
+                                               "NORMAL": 11,
+                                               "TEXCOORD_0": 12,
+                                               "TANGENT": 13
+                                       },
+                                       "indices": 14,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_artic5_lp_10758artic5_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 15,
+                                               "NORMAL": 16,
+                                               "TEXCOORD_0": 17,
+                                               "TANGENT": 18
+                                       },
+                                       "indices": 19,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_artic6_lp_10760artic6_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 20,
+                                               "NORMAL": 21,
+                                               "TEXCOORD_0": 22,
+                                               "TANGENT": 23
+                                       },
+                                       "indices": 24,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_attachmicro_lp_10762attachmicro_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 25,
+                                               "NORMAL": 26,
+                                               "TEXCOORD_0": 27,
+                                               "TANGENT": 28
+                                       },
+                                       "indices": 29,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_boulon_lp_10764boulon_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 30,
+                                               "NORMAL": 31,
+                                               "TEXCOORD_0": 32,
+                                               "TANGENT": 33
+                                       },
+                                       "indices": 34,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_corp_lp_10766corp_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 35,
+                                               "NORMAL": 36,
+                                               "TEXCOORD_0": 37,
+                                               "TANGENT": 38
+                                       },
+                                       "indices": 39,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_cylindre_lp_10768cylindre_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 40,
+                                               "NORMAL": 41,
+                                               "TEXCOORD_0": 42,
+                                               "TANGENT": 43
+                                       },
+                                       "indices": 44,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_micro_lp_10770micro_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 45,
+                                               "NORMAL": 46,
+                                               "TEXCOORD_0": 47,
+                                               "TANGENT": 48
+                                       },
+                                       "indices": 49,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_palque_lp_10772palque_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 50,
+                                               "NORMAL": 51,
+                                               "TEXCOORD_0": 52,
+                                               "TANGENT": 53
+                                       },
+                                       "indices": 54,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_petittendeur_lp_10774petittendeur_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 55,
+                                               "NORMAL": 56,
+                                               "TEXCOORD_0": 57,
+                                               "TANGENT": 58
+                                       },
+                                       "indices": 59,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_remonte_lp_10776remonte_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 60,
+                                               "NORMAL": 61,
+                                               "TEXCOORD_0": 62,
+                                               "TANGENT": 63
+                                       },
+                                       "indices": 64,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_rotate_lp_10778rotate_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 65,
+                                               "NORMAL": 66,
+                                               "TEXCOORD_0": 67,
+                                               "TANGENT": 68
+                                       },
+                                       "indices": 69,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_Shape1_lp_10780Shape1_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 70,
+                                               "NORMAL": 71,
+                                               "TEXCOORD_0": 72,
+                                               "TANGENT": 73
+                                       },
+                                       "indices": 74,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_Shape2_lp_10782Shape2_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 75,
+                                               "NORMAL": 76,
+                                               "TEXCOORD_0": 77,
+                                               "TANGENT": 78
+                                       },
+                                       "indices": 79,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               },
+               {
+                       "name": "mesh_tendeur_lp_10784tendeur_lp",
+                       "primitives": [
+                               {
+                                       "attributes": {
+                                               "POSITION": 80,
+                                               "NORMAL": 81,
+                                               "TEXCOORD_0": 82,
+                                               "TANGENT": 83
+                                       },
+                                       "indices": 84,
+                                       "material": 0,
+                                       "mode": 4
+                               }
+                       ]
+               }
+       ],
+       "nodes": [
+               {
+                       "name": "UnityGlTF_root",
+                       "children": [
+                               1
+                       ]
+               },
+               {
+                       "name": "node_microphone_-5376",
+                       "children": [
+                               2,
+                               3,
+                               4,
+                               5,
+                               6,
+                               7,
+                               8,
+                               9,
+                               10,
+                               11,
+                               12,
+                               13,
+                               14,
+                               15,
+                               16,
+                               17,
+                               18
+                       ],
+                       "matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
+               },
+               {
+                       "name": "node_artic1_lp_-5382",
+                       "mesh": 0
+               },
+               {
+                       "name": "node_artic2_lp_-5384",
+                       "mesh": 1
+               },
+               {
+                       "name": "node_artic4_lp_-5386",
+                       "mesh": 2
+               },
+               {
+                       "name": "node_artic5_lp_-5388",
+                       "mesh": 3
+               },
+               {
+                       "name": "node_artic6_lp_-5390",
+                       "mesh": 4
+               },
+               {
+                       "name": "node_attachmicro_lp_-5392",
+                       "mesh": 5
+               },
+               {
+                       "name": "node_boulon_lp_-5394",
+                       "mesh": 6
+               },
+               {
+                       "name": "node_corp_lp_-5396",
+                       "mesh": 7
+               },
+               {
+                       "name": "node_cylindre_lp_-5398",
+                       "mesh": 8
+               },
+               {
+                       "name": "node_micro_lp_-5400",
+                       "mesh": 9
+               },
+               {
+                       "name": "node_palque_lp_-5402",
+                       "mesh": 10
+               },
+               {
+                       "name": "node_petittendeur_lp_-5404",
+                       "mesh": 11
+               },
+               {
+                       "name": "node_remonte_lp_-5406",
+                       "mesh": 12
+               },
+               {
+                       "name": "node_rotate_lp_-5408",
+                       "mesh": 13
+               },
+               {
+                       "name": "node_Shape1_lp_-5410",
+                       "mesh": 14
+               },
+               {
+                       "name": "node_Shape2_lp_-5412",
+                       "mesh": 15
+               },
+               {
+                       "name": "node_tendeur_lp_-5414",
+                       "mesh": 16
+               }
+       ],
+       "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
+               }
+       ]
+}
\ No newline at end of file
index d5931ff..f7e0d76 100755 (executable)
@@ -177,3 +177,6 @@ msgstr "Skybox"
 
 msgid "DALI_DEMO_STR_TITLE_PBR"
 msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index 1ca9969..fe85fd1 100755 (executable)
@@ -177,3 +177,6 @@ msgstr "Skybox"
 
 msgid "DALI_DEMO_STR_TITLE_PBR"
 msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index ef898c2..52ea76b 100755 (executable)
@@ -309,3 +309,5 @@ msgstr "Web View"
 
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
 msgstr "Animated Vector Images"
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index 50f1998..9545053 100755 (executable)
@@ -324,3 +324,5 @@ msgstr "Text Bitmap Font"
 
 msgid "DALI_DEMO_STR_TITLE_WAVES"
 msgstr "Waves"
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index ca08afa..7b5fd6d 100755 (executable)
@@ -177,3 +177,6 @@ msgstr "Skybox"
 
 msgid "DALI_DEMO_STR_TITLE_PBR"
 msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index 132017c..f34fc34 100755 (executable)
@@ -177,3 +177,6 @@ msgstr "Skybox"
 
 msgid "DALI_DEMO_STR_TITLE_PBR"
 msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index dfbaee3..e870f72 100755 (executable)
@@ -198,3 +198,5 @@ msgstr "PBR"
 
 msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
 msgstr "애니메이션 벡터 이미지"
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index 9a24c30..7773a67 100755 (executable)
@@ -177,3 +177,6 @@ msgstr "Skybox"
 
 msgid "DALI_DEMO_STR_TITLE_PBR"
 msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index 204af54..529a182 100755 (executable)
@@ -177,3 +177,6 @@ msgstr "Skybox"
 
 msgid "DALI_DEMO_STR_TITLE_PBR"
 msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
index d280944..38132db 100755 (executable)
@@ -180,3 +180,6 @@ msgstr "Skybox"
 
 msgid "DALI_DEMO_STR_TITLE_PBR"
 msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
diff --git a/resources/shaders/cube_shader.fsh b/resources/shaders/cube_shader.fsh
new file mode 100644 (file)
index 0000000..8863a79
--- /dev/null
@@ -0,0 +1,8 @@
+uniform samplerCube    uSkyBoxTexture;
+varying mediump vec3 vTexCoord;
+
+void main()
+{
+  mediump vec4 texColor = textureCube(uSkyBoxTexture, vTexCoord);
+  gl_FragColor = texColor;
+}
\ No newline at end of file
diff --git a/resources/shaders/cube_shader.vsh b/resources/shaders/cube_shader.vsh
new file mode 100644 (file)
index 0000000..fed7299
--- /dev/null
@@ -0,0 +1,17 @@
+attribute mediump vec3   aPosition;
+uniform mediump mat4   uMvpMatrix;
+varying mediump vec3 vTexCoord;
+
+void main()
+{
+  vTexCoord.x = aPosition.x;
+  vTexCoord.y = -aPosition.y; // convert to GL coords
+  vTexCoord.z = aPosition.z;
+
+  mediump vec4 vertexPosition = vec4(aPosition, 1.0);
+  vec4 clipSpacePosition = uMvpMatrix * vertexPosition;
+  // Writes 1.0, the maximum depth value, into the depth buffer.
+  // This is an optimization to avoid running the fragment shader
+  // for the pixels hidden by the scene's objects.
+  gl_Position = clipSpacePosition.xyww;
+}
\ No newline at end of file
index 46b310a..d84effd 100644 (file)
@@ -115,6 +115,7 @@ extern "C"
 #define DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS")
 #define DALI_DEMO_STR_TITLE_RENDERING_RAY_MARCHING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERING_RAY_MARCHING")
 #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERER_STENCIL")
+#define DALI_DEMO_STR_TITLE_SCENE3D_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCENE3D_VIEW")
 #define DALI_DEMO_STR_TITLE_SCENE_LOADER dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCENE_LOADER")
 #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI")
 #define DALI_DEMO_STR_TITLE_SCROLL_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCROLL_VIEW")
@@ -226,6 +227,7 @@ extern "C"
 #define DALI_DEMO_STR_TITLE_RENDERING_RAY_MARCHING "Ray Marching"
 #define DALI_DEMO_STR_TITLE_RENDERING_RADIAL_PROGRESS "Radial Progress"
 #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL "Renderer Stencils"
+#define DALI_DEMO_STR_TITLE_SCENE3D_VIEW "Scene3D View glTF"
 #define DALI_DEMO_STR_TITLE_SCENE_LOADER "Scene Loader"
 #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI "Script Based UI"
 #define DALI_DEMO_STR_TITLE_SCROLL_VIEW "Scroll View"