<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>
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
--- /dev/null
+/*
+ * 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;
+}
--- /dev/null
+{
+ "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
+ }
+ ]
+}
--- /dev/null
+{
+ "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"
+ }
+ ]
+}
+
--- /dev/null
+{
+ "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
--- /dev/null
+{
+ "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
+ }
+ ]
+}
+
--- /dev/null
+{
+ "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
msgid "DALI_DEMO_STR_TITLE_PBR"
msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_PBR"
msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
msgstr "Animated Vector Images"
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_WAVES"
msgstr "Waves"
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_PBR"
msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_PBR"
msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
msgstr "애니메이션 벡터 이미지"
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_PBR"
msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_PBR"
msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
msgid "DALI_DEMO_STR_TITLE_PBR"
msgstr "PBR"
+
+msgid "DALI_DEMO_STR_TITLE_SCENE3D_VIEW"
+msgstr "Scene3D View glTF"
--- /dev/null
+uniform samplerCube uSkyBoxTexture;
+varying mediump vec3 vTexCoord;
+
+void main()
+{
+ mediump vec4 texColor = textureCube(uSkyBoxTexture, vTexCoord);
+ gl_FragColor = texColor;
+}
\ No newline at end of file
--- /dev/null
+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
#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")
#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"