From: Seungho Baek Date: Wed, 4 Sep 2024 06:24:55 +0000 (+0900) Subject: Makes SceneView return DestinationCamera during Camera Transition X-Git-Tag: dali_2.3.40~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1b9d3e288fc8ec70aefc3bb958c066fdad7ec9b0;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Makes SceneView return DestinationCamera during Camera Transition Change-Id: I07d5e79a859f53700325a36b02bfdbe68e00e085 Signed-off-by: Seungho Baek --- diff --git a/automated-tests/src/dali-scene3d-internal/CMakeLists.txt b/automated-tests/src/dali-scene3d-internal/CMakeLists.txt index 8385cb9021..1c4f40af1a 100755 --- a/automated-tests/src/dali-scene3d-internal/CMakeLists.txt +++ b/automated-tests/src/dali-scene3d-internal/CMakeLists.txt @@ -18,6 +18,7 @@ SET(TC_SOURCES utc-Dali-MaterialImpl.cpp utc-Dali-ModelCacheManager.cpp utc-Dali-ModelPrimitiveImpl.cpp + utc-Dali-SceneViewImpl.cpp ) # List of test harness files (Won't get parsed for test cases) diff --git a/automated-tests/src/dali-scene3d-internal/utc-Dali-SceneViewImpl.cpp b/automated-tests/src/dali-scene3d-internal/utc-Dali-SceneViewImpl.cpp new file mode 100644 index 0000000000..0689257441 --- /dev/null +++ b/automated-tests/src/dali-scene3d-internal/utc-Dali-SceneViewImpl.cpp @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2024 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 +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + + +using namespace Dali; +using namespace Dali::Toolkit; + +namespace +{ + +// Functor to test whether a Finish signal is emitted +struct TransitionFinishCheck +{ + TransitionFinishCheck(bool& signalReceived) + : mSignalReceived(signalReceived) + { + } + + void operator()(Scene3D::SceneView& sceneView) + { + mSignalReceived = true; + } + + void Reset() + { + mSignalReceived = false; + } + + void CheckSignalReceived() + { + if(!mSignalReceived) + { + tet_printf("Expected Finish signal was not received\n"); + tet_result(TET_FAIL); + } + else + { + tet_result(TET_PASS); + } + } + + void CheckSignalNotReceived() + { + if(mSignalReceived) + { + tet_printf("Unexpected Finish signal was received\n"); + tet_result(TET_FAIL); + } + else + { + tet_result(TET_PASS); + } + } + + bool& mSignalReceived; // owned by individual tests +}; + +} + +int UtcDaliSceneViewImplCameraTransitionFail(void) +{ + ToolkitTestApplication application; + + Scene3D::SceneView view = Scene3D::SceneView::New(); + application.GetScene().Add(view); + + CameraActor camera1 = CameraActor::New3DCamera(); + camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); + view.AddCamera(camera1); + DALI_TEST_CHECK(!camera1.GetParent()); + view.SelectCamera("camera1"); + DALI_TEST_CHECK(camera1.GetParent()); + DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); + + camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); + view.Add(camera1); + + bool signalReceived(false); + TransitionFinishCheck finishCheck(signalReceived); + view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); + + view.StartCameraTransition("camera1", 1.0f); + + application.SendNotification(); + application.Render(500); + application.SendNotification(); + + // We didn't expect the animation to finish yet + finishCheck.CheckSignalNotReceived(); + + application.SendNotification(); + application.Render(600); + application.SendNotification(); + + finishCheck.CheckSignalNotReceived(); + + CameraActor finalCamera = view.GetSelectedCamera(); + DALI_TEST_EQUALS(finalCamera, camera1, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneViewImplCameraChangeDuringTransition(void) +{ + ToolkitTestApplication application; + + Scene3D::SceneView view = Scene3D::SceneView::New(); + application.GetScene().Add(view); + + CameraActor camera1 = CameraActor::New3DCamera(); + camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); + view.AddCamera(camera1); + DALI_TEST_CHECK(!camera1.GetParent()); + view.SelectCamera("camera1"); + DALI_TEST_CHECK(camera1.GetParent()); + DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); + + camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); + view.Add(camera1); + + CameraActor camera2 = CameraActor::New3DCamera(); + camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); + view.AddCamera(camera2); + camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); + + application.SendNotification(); + application.Render(); + + bool signalReceived(false); + TransitionFinishCheck finishCheck(signalReceived); + view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); + + view.StartCameraTransition("camera2", 1.0f); + + CameraActor camera3 = CameraActor::New3DCamera(); + camera3.SetProperty(Dali::Actor::Property::NAME, "camera3"); + view.AddCamera(camera3); + view.SelectCamera("camera3"); + + DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION); + DALI_TEST_EQUALS(camera2, view.GetSelectedCamera(), TEST_LOCATION); + + application.SendNotification(); + application.Render(500); + application.SendNotification(); + + // We didn't expect the animation to finish yet + finishCheck.CheckSignalNotReceived(); + + Dali::Scene3D::Internal::SceneView& sceneViewImpl = Dali::Scene3D::GetImpl(view); + auto renderTask = sceneViewImpl.GetRenderTask(); + DALI_TEST_CHECK(renderTask); + + CameraActor currentCamera = renderTask.GetCameraActor(); + DALI_TEST_CHECK(currentCamera); + DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION); + DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION); + + view.SelectCamera(view.GetCameraCount() - 1); + DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION); + DALI_TEST_NOT_EQUALS(currentCamera, view.GetSelectedCamera(), 0.0f, TEST_LOCATION); + + application.SendNotification(); + application.Render(600); + application.SendNotification(); + + finishCheck.CheckSignalReceived(); + + CameraActor finalCamera = view.GetSelectedCamera(); + DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); + + view.SelectCamera("camera3"); + DALI_TEST_EQUALS(camera3, view.GetSelectedCamera(), TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneViewImplStartCameraTransitionDuringTransition(void) +{ + ToolkitTestApplication application; + + Scene3D::SceneView view = Scene3D::SceneView::New(); + application.GetScene().Add(view); + + CameraActor camera1 = CameraActor::New3DCamera(); + camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); + view.AddCamera(camera1); + DALI_TEST_CHECK(!camera1.GetParent()); + view.SelectCamera("camera1"); + DALI_TEST_CHECK(camera1.GetParent()); + DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); + + camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); + view.Add(camera1); + + CameraActor camera2 = CameraActor::New3DCamera(); + camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); + view.AddCamera(camera2); + camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); + + application.SendNotification(); + application.Render(); + + bool signalReceived(false); + TransitionFinishCheck finishCheck(signalReceived); + view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); + + view.StartCameraTransition("camera2", 1.0f); + + application.SendNotification(); + application.Render(500); + application.SendNotification(); + + // We didn't expect the animation to finish yet + finishCheck.CheckSignalNotReceived(); + + CameraActor camera3 = CameraActor::New3DCamera(); + camera3.SetProperty(Dali::Actor::Property::NAME, "camera3"); + view.AddCamera(camera3); + + view.StartCameraTransition("camera3", 1.0f); + + application.SendNotification(); + application.Render(600); + application.SendNotification(); + + finishCheck.CheckSignalReceived(); + + CameraActor finalCamera = view.GetSelectedCamera(); + DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneViewImplCameraTransition1(void) +{ + ToolkitTestApplication application; + + Scene3D::SceneView view = Scene3D::SceneView::New(); + application.GetScene().Add(view); + + CameraActor camera1 = CameraActor::New3DCamera(); + camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); + view.AddCamera(camera1); + DALI_TEST_CHECK(!camera1.GetParent()); + view.SelectCamera("camera1"); + DALI_TEST_CHECK(camera1.GetParent()); + DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); + + Scene3D::Model model1 = Scene3D::Model::New(); + model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); + view.Add(model1); + + camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); + camera1.SetNearClippingPlane(10.0f); + camera1.SetFarClippingPlane(100.0f); + model1.Add(camera1); + + CameraActor camera2 = CameraActor::New3DCamera(); + camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); + view.AddCamera(camera2); + camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); + camera2.SetNearClippingPlane(5.0f); + camera2.SetFarClippingPlane(50.0f); + + Scene3D::Model model2 = Scene3D::Model::New(); + model2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); + view.Add(model2); + model2.Add(camera2); + + application.SendNotification(); + application.Render(); + + camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL); + camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL); + camera1.SetFieldOfView(1.0f); // Vertical : 1.0f, Horizontal : 0.533293254f + camera2.SetFieldOfView(1.0f); // Vertical : 1.65924551f, Horizontal : 1.0f + camera1.SetAspectRatio(0.5f); + camera2.SetAspectRatio(0.5f); + tet_printf("camera1 fov : %f\n", camera1.GetFieldOfView()); + tet_printf("camera2 fov : %f\n", camera2.GetFieldOfView()); + tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio()); + tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio()); + tet_printf("camera1 direction : %d\n", camera1.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); + tet_printf("camera2 direction : %d\n", camera2.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); + + bool signalReceived(false); + TransitionFinishCheck finishCheck(signalReceived); + view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); + + view.StartCameraTransition("camera2", 1.0f); + + application.SendNotification(); + application.Render(500); + application.SendNotification(); + + // We didn't expect the animation to finish yet + finishCheck.CheckSignalNotReceived(); + + + Dali::Scene3D::Internal::SceneView& sceneViewImpl = Dali::Scene3D::GetImpl(view); + auto renderTask = sceneViewImpl.GetRenderTask(); + DALI_TEST_CHECK(renderTask); + + CameraActor currentCamera = renderTask.GetCameraActor(); + DALI_TEST_CHECK(currentCamera); + DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION); + DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION); + + Vector3 currentPosition = currentCamera.GetCurrentProperty(Dali::Actor::Property::POSITION); + DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION); + DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION); + DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION); + float currentFov = (0.533293254f + 1.0f) / 2.0f; + DALI_TEST_EQUALS(currentCamera.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION); + DALI_TEST_EQUALS(currentCamera.GetCurrentProperty(Dali::CameraActor::Property::FIELD_OF_VIEW), currentFov, 0.05f, TEST_LOCATION); + + application.SendNotification(); + application.Render(600); + application.SendNotification(); + + finishCheck.CheckSignalReceived(); + + CameraActor finalCamera = view.GetSelectedCamera(); + DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliSceneViewImplCameraTransition2(void) +{ + ToolkitTestApplication application; + + Scene3D::SceneView view = Scene3D::SceneView::New(); + application.GetScene().Add(view); + + CameraActor camera1 = CameraActor::New3DCamera(); + camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); + view.AddCamera(camera1); + DALI_TEST_CHECK(!camera1.GetParent()); + view.SelectCamera("camera1"); + DALI_TEST_CHECK(camera1.GetParent()); + DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); + + Scene3D::Model model1 = Scene3D::Model::New(); + model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); + view.Add(model1); + + camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); + camera1.SetNearClippingPlane(10.0f); + camera1.SetFarClippingPlane(100.0f); + model1.Add(camera1); + + CameraActor camera2 = CameraActor::New3DCamera(); + camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); + view.AddCamera(camera2); + camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 200.0f); + camera2.SetNearClippingPlane(5.0f); + camera2.SetFarClippingPlane(50.0f); + // Camera2 is not added on SceneView, it will added on root layer automatically. + + application.SendNotification(); + application.Render(); + + bool signalReceived(false); + TransitionFinishCheck finishCheck(signalReceived); + view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); + + camera1.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION); + camera2.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION); + camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL); + camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL); + + camera1.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f); // Vertical : 10.0f, Horizontal : 5.0f + camera2.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f); // Vertical : 20.0f, Horizontal : 10.0f + camera1.SetAspectRatio(0.5f); + camera2.SetAspectRatio(0.5f); + + tet_printf("camera1 fov : %f\n", camera1.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE)); + tet_printf("camera2 fov : %f\n", camera2.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE)); + tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio()); + tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio()); + tet_printf("camera1 direction : %f\n", camera1.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); + tet_printf("camera2 direction : %f\n", camera2.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); + + int camera2Index = view.GetCameraCount() - 1; + view.StartCameraTransition(camera2Index, 1.0f); + + application.SendNotification(); + application.Render(500); + application.SendNotification(); + + // We didn't expect the animation to finish yet + finishCheck.CheckSignalNotReceived(); + + Dali::Scene3D::Internal::SceneView& sceneViewImpl = Dali::Scene3D::GetImpl(view); + auto renderTask = sceneViewImpl.GetRenderTask(); + DALI_TEST_CHECK(renderTask); + + CameraActor currentCamera = renderTask.GetCameraActor(); + DALI_TEST_CHECK(currentCamera); + DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION); + DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION); + + Vector3 currentPosition = currentCamera.GetCurrentProperty(Dali::Actor::Property::POSITION); + DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION); + DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION); + DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION); + float currentOrthographicSize = (5.0f + 10.0f) / 2.0f; + DALI_TEST_EQUALS(currentCamera.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION); + DALI_TEST_EQUALS(currentCamera.GetCurrentProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), currentOrthographicSize, 0.05f, TEST_LOCATION); + + application.SendNotification(); + application.Render(600); + application.SendNotification(); + + finishCheck.CheckSignalReceived(); + + CameraActor finalCamera = view.GetSelectedCamera(); + DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); + + END_TEST; +} diff --git a/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp b/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp index 7b70199f8c..4e77816043 100644 --- a/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp +++ b/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp @@ -1571,403 +1571,3 @@ int UtcDaliSceneViewSelectCamera(void) END_TEST; } - - -// Functor to test whether a Finish signal is emitted -struct TransitionFinishCheck -{ - TransitionFinishCheck(bool& signalReceived) - : mSignalReceived(signalReceived) - { - } - - void operator()(Scene3D::SceneView& sceneView) - { - mSignalReceived = true; - } - - void Reset() - { - mSignalReceived = false; - } - - void CheckSignalReceived() - { - if(!mSignalReceived) - { - tet_printf("Expected Finish signal was not received\n"); - tet_result(TET_FAIL); - } - else - { - tet_result(TET_PASS); - } - } - - void CheckSignalNotReceived() - { - if(mSignalReceived) - { - tet_printf("Unexpected Finish signal was received\n"); - tet_result(TET_FAIL); - } - else - { - tet_result(TET_PASS); - } - } - - bool& mSignalReceived; // owned by individual tests -}; - -int UtcDaliSceneViewCameraTransitionFail(void) -{ - ToolkitTestApplication application; - - Scene3D::SceneView view = Scene3D::SceneView::New(); - application.GetScene().Add(view); - - CameraActor camera1 = CameraActor::New3DCamera(); - camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); - view.AddCamera(camera1); - DALI_TEST_CHECK(!camera1.GetParent()); - view.SelectCamera("camera1"); - DALI_TEST_CHECK(camera1.GetParent()); - DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); - - camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); - view.Add(camera1); - - bool signalReceived(false); - TransitionFinishCheck finishCheck(signalReceived); - view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); - - view.StartCameraTransition("camera1", 1.0f); - - application.SendNotification(); - application.Render(500); - application.SendNotification(); - - // We didn't expect the animation to finish yet - finishCheck.CheckSignalNotReceived(); - - application.SendNotification(); - application.Render(600); - application.SendNotification(); - - finishCheck.CheckSignalNotReceived(); - - CameraActor finalCamera = view.GetSelectedCamera(); - DALI_TEST_EQUALS(finalCamera, camera1, TEST_LOCATION); - - END_TEST; -} - -int UtcDaliSceneViewCameraChangeDuringTransition(void) -{ - ToolkitTestApplication application; - - Scene3D::SceneView view = Scene3D::SceneView::New(); - application.GetScene().Add(view); - - CameraActor camera1 = CameraActor::New3DCamera(); - camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); - view.AddCamera(camera1); - DALI_TEST_CHECK(!camera1.GetParent()); - view.SelectCamera("camera1"); - DALI_TEST_CHECK(camera1.GetParent()); - DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); - - camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); - view.Add(camera1); - - CameraActor camera2 = CameraActor::New3DCamera(); - camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); - view.AddCamera(camera2); - camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); - - application.SendNotification(); - application.Render(); - - bool signalReceived(false); - TransitionFinishCheck finishCheck(signalReceived); - view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); - - view.StartCameraTransition("camera2", 1.0f); - - CameraActor camera3 = CameraActor::New3DCamera(); - camera3.SetProperty(Dali::Actor::Property::NAME, "camera3"); - view.AddCamera(camera3); - view.SelectCamera("camera3"); - - DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION); - DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); - - application.SendNotification(); - application.Render(500); - application.SendNotification(); - - // We didn't expect the animation to finish yet - finishCheck.CheckSignalNotReceived(); - - CameraActor currentCamera = view.GetSelectedCamera(); - DALI_TEST_CHECK(currentCamera); - DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION); - DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION); - - view.SelectCamera(view.GetCameraCount() - 1); - DALI_TEST_NOT_EQUALS(camera3, view.GetSelectedCamera(), 0.0f, TEST_LOCATION); - DALI_TEST_EQUALS(currentCamera, view.GetSelectedCamera(), TEST_LOCATION); - - application.SendNotification(); - application.Render(600); - application.SendNotification(); - - finishCheck.CheckSignalReceived(); - - CameraActor finalCamera = view.GetSelectedCamera(); - DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); - - view.SelectCamera("camera3"); - DALI_TEST_EQUALS(camera3, view.GetSelectedCamera(), TEST_LOCATION); - - END_TEST; -} - -int UtcDaliSceneViewStartCameraTransitionDuringTransition(void) -{ - ToolkitTestApplication application; - - Scene3D::SceneView view = Scene3D::SceneView::New(); - application.GetScene().Add(view); - - CameraActor camera1 = CameraActor::New3DCamera(); - camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); - view.AddCamera(camera1); - DALI_TEST_CHECK(!camera1.GetParent()); - view.SelectCamera("camera1"); - DALI_TEST_CHECK(camera1.GetParent()); - DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); - - camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); - view.Add(camera1); - - CameraActor camera2 = CameraActor::New3DCamera(); - camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); - view.AddCamera(camera2); - camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); - - application.SendNotification(); - application.Render(); - - bool signalReceived(false); - TransitionFinishCheck finishCheck(signalReceived); - view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); - - view.StartCameraTransition("camera2", 1.0f); - - application.SendNotification(); - application.Render(500); - application.SendNotification(); - - // We didn't expect the animation to finish yet - finishCheck.CheckSignalNotReceived(); - - CameraActor camera3 = CameraActor::New3DCamera(); - camera3.SetProperty(Dali::Actor::Property::NAME, "camera3"); - view.AddCamera(camera3); - - view.StartCameraTransition("camera3", 1.0f); - - application.SendNotification(); - application.Render(600); - application.SendNotification(); - - finishCheck.CheckSignalReceived(); - - CameraActor finalCamera = view.GetSelectedCamera(); - DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); - - END_TEST; -} - -int UtcDaliSceneViewCameraTransition1(void) -{ - ToolkitTestApplication application; - - Scene3D::SceneView view = Scene3D::SceneView::New(); - application.GetScene().Add(view); - - CameraActor camera1 = CameraActor::New3DCamera(); - camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); - view.AddCamera(camera1); - DALI_TEST_CHECK(!camera1.GetParent()); - view.SelectCamera("camera1"); - DALI_TEST_CHECK(camera1.GetParent()); - DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); - - Scene3D::Model model1 = Scene3D::Model::New(); - model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); - view.Add(model1); - - camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); - camera1.SetNearClippingPlane(10.0f); - camera1.SetFarClippingPlane(100.0f); - model1.Add(camera1); - - CameraActor camera2 = CameraActor::New3DCamera(); - camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); - view.AddCamera(camera2); - camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); - camera2.SetNearClippingPlane(5.0f); - camera2.SetFarClippingPlane(50.0f); - - Scene3D::Model model2 = Scene3D::Model::New(); - model2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 100.0f); - view.Add(model2); - model2.Add(camera2); - - application.SendNotification(); - application.Render(); - - camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL); - camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL); - camera1.SetFieldOfView(1.0f); // Vertical : 1.0f, Horizontal : 0.533293254f - camera2.SetFieldOfView(1.0f); // Vertical : 1.65924551f, Horizontal : 1.0f - camera1.SetAspectRatio(0.5f); - camera2.SetAspectRatio(0.5f); - tet_printf("camera1 fov : %f\n", camera1.GetFieldOfView()); - tet_printf("camera2 fov : %f\n", camera2.GetFieldOfView()); - tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio()); - tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio()); - tet_printf("camera1 direction : %d\n", camera1.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); - tet_printf("camera2 direction : %d\n", camera2.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); - - bool signalReceived(false); - TransitionFinishCheck finishCheck(signalReceived); - view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); - - view.StartCameraTransition("camera2", 1.0f); - - application.SendNotification(); - application.Render(500); - application.SendNotification(); - - // We didn't expect the animation to finish yet - finishCheck.CheckSignalNotReceived(); - - CameraActor currentCamera = view.GetSelectedCamera(); - DALI_TEST_CHECK(currentCamera); - DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION); - DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION); - - Vector3 currentPosition = currentCamera.GetCurrentProperty(Dali::Actor::Property::POSITION); - DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION); - DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION); - DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION); - float currentFov = (0.533293254f + 1.0f) / 2.0f; - DALI_TEST_EQUALS(currentCamera.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION); - DALI_TEST_EQUALS(currentCamera.GetCurrentProperty(Dali::CameraActor::Property::FIELD_OF_VIEW), currentFov, 0.05f, TEST_LOCATION); - - application.SendNotification(); - application.Render(600); - application.SendNotification(); - - finishCheck.CheckSignalReceived(); - - CameraActor finalCamera = view.GetSelectedCamera(); - DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); - - END_TEST; -} - -int UtcDaliSceneViewCameraTransition2(void) -{ - ToolkitTestApplication application; - - Scene3D::SceneView view = Scene3D::SceneView::New(); - application.GetScene().Add(view); - - CameraActor camera1 = CameraActor::New3DCamera(); - camera1.SetProperty(Dali::Actor::Property::NAME, "camera1"); - view.AddCamera(camera1); - DALI_TEST_CHECK(!camera1.GetParent()); - view.SelectCamera("camera1"); - DALI_TEST_CHECK(camera1.GetParent()); - DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION); - - Scene3D::Model model1 = Scene3D::Model::New(); - model1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); - view.Add(model1); - - camera1.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * -50.0f); - camera1.SetNearClippingPlane(10.0f); - camera1.SetFarClippingPlane(100.0f); - model1.Add(camera1); - - CameraActor camera2 = CameraActor::New3DCamera(); - camera2.SetProperty(Dali::Actor::Property::NAME, "camera2"); - view.AddCamera(camera2); - camera2.SetProperty(Dali::Actor::Property::POSITION, Vector3::ONE * 200.0f); - camera2.SetNearClippingPlane(5.0f); - camera2.SetFarClippingPlane(50.0f); - // Camera2 is not added on SceneView, it will added on root layer automatically. - - application.SendNotification(); - application.Render(); - - bool signalReceived(false); - TransitionFinishCheck finishCheck(signalReceived); - view.CameraTransitionFinishedSignal().Connect(&application, finishCheck); - - camera1.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION); - camera2.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION); - camera1.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL); - camera2.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL); - - camera1.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f); // Vertical : 10.0f, Horizontal : 5.0f - camera2.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 10.0f); // Vertical : 20.0f, Horizontal : 10.0f - camera1.SetAspectRatio(0.5f); - camera2.SetAspectRatio(0.5f); - - tet_printf("camera1 fov : %f\n", camera1.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE)); - tet_printf("camera2 fov : %f\n", camera2.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE)); - tet_printf("camera1 aspect : %f\n", camera1.GetAspectRatio()); - tet_printf("camera2 aspect : %f\n", camera2.GetAspectRatio()); - tet_printf("camera1 direction : %f\n", camera1.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); - tet_printf("camera2 direction : %f\n", camera2.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION)); - - int camera2Index = view.GetCameraCount() - 1; - view.StartCameraTransition(camera2Index, 1.0f); - - application.SendNotification(); - application.Render(500); - application.SendNotification(); - - // We didn't expect the animation to finish yet - finishCheck.CheckSignalNotReceived(); - - CameraActor currentCamera = view.GetSelectedCamera(); - DALI_TEST_CHECK(currentCamera); - DALI_TEST_NOT_EQUALS(currentCamera, camera1, 0.0f, TEST_LOCATION); - DALI_TEST_NOT_EQUALS(currentCamera, camera2, 0.0f, TEST_LOCATION); - - Vector3 currentPosition = currentCamera.GetCurrentProperty(Dali::Actor::Property::POSITION); - DALI_TEST_EQUALS(currentPosition, Vector3::ONE * 50.0f, TEST_LOCATION); - DALI_TEST_EQUALS(currentCamera.GetNearClippingPlane(), 5.0f, TEST_LOCATION); - DALI_TEST_EQUALS(currentCamera.GetFarClippingPlane(), 100.0f, TEST_LOCATION); - float currentOrthographicSize = (5.0f + 10.0f) / 2.0f; - DALI_TEST_EQUALS(currentCamera.GetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL, TEST_LOCATION); - DALI_TEST_EQUALS(currentCamera.GetCurrentProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), currentOrthographicSize, 0.05f, TEST_LOCATION); - - application.SendNotification(); - application.Render(600); - application.SendNotification(); - - finishCheck.CheckSignalReceived(); - - CameraActor finalCamera = view.GetSelectedCamera(); - DALI_TEST_EQUALS(finalCamera, camera2, TEST_LOCATION); - - END_TEST; -} \ No newline at end of file diff --git a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp index f7251b36b7..f570010e69 100644 --- a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp +++ b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp @@ -443,7 +443,7 @@ uint32_t SceneView::GetCameraCount() const CameraActor SceneView::GetSelectedCamera() const { - return mSelectedCamera; + return (mInCameraTransition && mTransitionDestinationCamera) ? mTransitionDestinationCamera : mSelectedCamera; } CameraActor SceneView::GetCamera(uint32_t index) const