From 791053201c4d42c3ebf6d5e89a9fe464ce761fa8 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Mon, 7 Nov 2022 20:39:44 +0900 Subject: [PATCH] [Tizen] Backport tizen_7.5 for Scene3D This is a combination of 5 commits. Configure cameraParam by API Let scene3d example camera configure cameraActor by API, not the sample's own logic. Signed-off-by: Eunki, Hong Modify to use LoadEnvironmentMap to load skybox env map Signed-off-by: seungho baek Fix to use async resource load in scene3d-model example Signed-off-by: seungho baek Use Layer_3D in scene3d-model example Signed-off-by: seungho baek Fix scene3d examples Signed-off-by: seungho baek Change-Id: I818a05f443f62249bde40bcc3107e7969952d3bf Signed-off-by: Eunki, Hong --- examples/scene3d-model/scene3d-model-example.cpp | 35 ++++++++------- examples/scene3d/scene3d-example.cpp | 57 ++++++++---------------- resources/models/exercise_model.dli | 4 +- 3 files changed, 40 insertions(+), 56 deletions(-) diff --git a/examples/scene3d-model/scene3d-model-example.cpp b/examples/scene3d-model/scene3d-model-example.cpp index e0535a6..1a08850 100644 --- a/examples/scene3d-model/scene3d-model-example.cpp +++ b/examples/scene3d-model/scene3d-model-example.cpp @@ -25,6 +25,7 @@ #include #include +#include using namespace Dali; using namespace Dali::Toolkit; @@ -217,8 +218,6 @@ public: mWindow = application.GetWindow(); mWindow.GetRootLayer().SetProperty(Layer::Property::BEHAVIOR, Layer::LAYER_3D); - mWindow.GetRootLayer().SetProperty(Dali::Layer::Property::BEHAVIOR, Dali::Layer::Behavior::LAYER_3D); - // Get a handle to the mWindow mWindow.SetBackgroundColor(Color::WHITE); @@ -263,6 +262,7 @@ public: void CreateSceneFromGLTF(uint32_t index) { + mReadyToLoad = false; if(mModel) { mWindow.GetRootLayer().Remove(mModel); @@ -285,17 +285,19 @@ public: mModel.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); mModel.SetImageBasedLightSource(uri_diffuse_texture, uri_specular_texture, 0.6f); - mWindow.Add(mModel); + mModel.ResourceReadySignal().Connect(this, &Scene3DModelExample::ResourceReady); - mModel.ResourceReadySignal().Connect(this, &Scene3DModelExample::ResourceReadySignal); + mWindow.Add(mModel); } - void ResourceReadySignal(Control control) + void ResourceReady(Control control) { + mReadyToLoad = true; if(mModel.GetAnimationCount() > 0) { - mModel.GetAnimation(0u).Play(); - mModel.GetAnimation(0u).SetLoopCount(0); + Animation animation = (mCurrentGlTF == 0u) ? mModel.GetAnimation(0u) : mModel.GetAnimation("idleToSquatClip_0"); + animation.Play(); + animation.SetLoopCount(0); } } @@ -375,15 +377,9 @@ public: mSkyboxGeometry.AddVertexBuffer(vertexBuffer); mSkyboxGeometry.SetType(Geometry::TRIANGLES); - // Diffuse Cube Map - Devel::PixelBuffer diffusePixelBuffer = LoadImageFromFile(uri_cube_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(); + Dali::Scene3D::Loader::EnvironmentMapData environmentMapData; + Dali::Scene3D::Loader::LoadEnvironmentMap(uri_cube_diffuse_texture, environmentMapData); + Texture texture = environmentMapData.GetTexture(); mSkyboxTextures = TextureSet::New(); mSkyboxTextures.SetTexture(0, texture); @@ -473,6 +469,11 @@ public: void ChangeModel(int32_t direction) { + if(!mReadyToLoad) + { + return; + } + mCurrentGlTF += direction; if(mCurrentGlTF >= NUM_OF_GLTF_MODELS) { @@ -632,6 +633,8 @@ private: float mWheelDelta{1.0f}; int32_t mCurrentGlTF{0}; + + bool mReadyToLoad{true}; }; int32_t DALI_EXPORT_API main(int32_t argc, char** argv) diff --git a/examples/scene3d/scene3d-example.cpp b/examples/scene3d/scene3d-example.cpp index 555143c..da9ea20 100644 --- a/examples/scene3d/scene3d-example.cpp +++ b/examples/scene3d/scene3d-example.cpp @@ -125,41 +125,6 @@ Actor CreateErrorMessage(std::string msg) return label; } -void ConfigureCamera(const CameraParameters& params, CameraActor camera) -{ - if(params.isPerspective) - { - camera.SetProjectionMode(Camera::PERSPECTIVE_PROJECTION); - camera.SetNearClippingPlane(params.zNear); - camera.SetFarClippingPlane(params.zFar); - camera.SetFieldOfView(Radian(Degree(params.yFov))); - } - else - { - camera.SetProjectionMode(Camera::ORTHOGRAPHIC_PROJECTION); - camera.SetOrthographicProjection(params.orthographicSize.x, - params.orthographicSize.y, - params.orthographicSize.z, - params.orthographicSize.w, - params.zNear, - params.zFar); - } - - // model - Vector3 camTranslation; - Vector3 camScale; - Quaternion camOrientation; - params.CalculateTransformComponents(camTranslation, camOrientation, camScale); - - SetActorCentered(camera); - camera.SetInvertYAxis(true); - camera.SetProperty(Actor::Property::POSITION, camTranslation); - camera.SetProperty(Actor::Property::ORIENTATION, camOrientation); - camera.SetProperty(Actor::Property::SCALE, camScale); - - camOrientation.Conjugate(); -} - void ConfigureBlendShapeShaders(ResourceBundle& resources, const SceneDefinition& scene, Actor root, std::vector&& requests) { std::vector errors; @@ -232,7 +197,8 @@ Actor LoadScene(std::string sceneName, CameraActor camera, std::vectorempty()) { - auto getActor = [&root](const Scene3D::Loader::AnimatedProperty& property) { - return root.FindChildByName(property.mNodeName); + auto getActor = [&](const Scene3D::Loader::AnimatedProperty& property) + { + Dali::Actor actor; + if(property.mNodeIndex != Scene3D::Loader::INVALID_INDEX) + { + auto* node = scene.GetNode(property.mNodeIndex); + if(node != nullptr) + { + actor = root.FindChildById(node->mNodeId); + } + } + else + { + actor = root.FindChildByName(property.mNodeName); + } + return actor; }; animation = (*animations)[0].ReAnimate(getActor); @@ -486,6 +466,7 @@ void Scene3DExample::OnTap(Dali::Actor actor, const Dali::TapGesture& tap) auto id = mItemView.GetItemId(actor); + Scene3D::Loader::InitializeGltfLoader(); try { auto window = mApp.GetWindow(); diff --git a/resources/models/exercise_model.dli b/resources/models/exercise_model.dli index 718162f..c20da2e 100644 --- a/resources/models/exercise_model.dli +++ b/resources/models/exercise_model.dli @@ -1094,8 +1094,8 @@ "uCubeMatrix" : [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ], "uMaxLOD" : 6 }, { - "vertex" : "dli_images.vsh", - "fragment" : "dli_images.fsh", + "vertex" : "../shaders/dli_images.vsh", + "fragment" : "../shaders/dli_images.fsh", "rendererState" : "DEPTH_TEST|ALPHA_BLEND", "uCubeMatrix" : [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ], "uTilt" : [ 0.0, 0.0 ] -- 2.7.4