DALi Version 2.2.11
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-scene3d / utc-Dali-CameraParameters.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // Enable debug log for test coverage
19 #define DEBUG_ENABLED 1
20
21 #include <dali-test-suite-utils.h>
22 #include <dali/devel-api/actors/camera-actor-devel.h>
23 #include <string_view>
24 #include "dali-scene3d/public-api/loader/camera-parameters.h"
25
26 using namespace Dali;
27 using namespace Dali::Scene3D::Loader;
28
29 int UtcDaliCameraParameters(void)
30 {
31   Quaternion       qView = Quaternion(Radian(Degree(180.f)), Vector3::YAXIS);
32   CameraParameters camParams;
33   camParams.matrix.SetTransformComponents(Vector3::ONE * 2.f,
34                                           qView,
35                                           Vector3::ZAXIS * -100.f);
36   camParams.orthographicSize = 3.0f;
37   camParams.aspectRatio      = 1.0f;
38   camParams.yFov             = Degree(Radian(M_PI * .5)).degree;
39   camParams.zNear            = 1.f;
40   camParams.zFar             = 1000.f;
41
42   Vector3    scale;
43   Quaternion orientation;
44   Vector3    position;
45   camParams.CalculateTransformComponents(position, orientation, scale);
46   DALI_TEST_EQUAL(scale, Vector3::ONE * 2.f);
47   DALI_TEST_EQUAL(orientation, Quaternion::IDENTITY); // 2 180 degrees rotations along y
48   DALI_TEST_EQUAL(position, Vector3::ZAXIS * -100.f);
49
50   TestApplication app;
51   CameraActor     camera = CameraActor::New();
52   for(auto i : {false, true})
53   {
54     camParams.isPerspective = i;
55
56     auto   viewProjection = camParams.GetViewProjection();
57     Matrix view{false};
58     Matrix::Multiply(view, Matrix(qView), camParams.matrix);
59     view.Invert();
60     DALI_TEST_EQUAL(viewProjection.GetView(), view);
61
62     camParams.ConfigureCamera(camera);
63     DALI_TEST_EQUAL(camParams.zNear, camera.GetNearClippingPlane());
64     DALI_TEST_EQUAL(camParams.zFar, camera.GetFarClippingPlane());
65
66     DALI_TEST_EQUAL(camera.GetInvertYAxis(), true);
67     DALI_TEST_EQUAL(camera.GetProperty(Actor::Property::POSITION).Get<Vector3>(), position);
68     DALI_TEST_EQUAL(camera.GetProperty(Actor::Property::ORIENTATION).Get<Quaternion>(), orientation);
69     DALI_TEST_EQUAL(camera.GetProperty(Actor::Property::SCALE).Get<Vector3>(), scale);
70
71     if(camParams.isPerspective)
72     {
73       DALI_TEST_EQUAL(camera.GetProperty(Dali::CameraActor::Property::FIELD_OF_VIEW).Get<float>(), Radian(Degree(camParams.yFov)).radian);
74     }
75     else
76     {
77       DALI_TEST_EQUAL(camera.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), camParams.orthographicSize);
78     }
79   }
80
81   END_TEST;
82 }