2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <dali/public-api/dali-core.h>
23 #include "dali-test-suite-utils/dali-test-suite-utils.h"
27 void camera_actor_test_startup(void)
29 test_return_value = TET_UNDEF;
32 void camera_actor_test_cleanup(void)
34 test_return_value = TET_PASS;
40 const float FLOAT_EPSILON = 0.001f;
41 const float TEST_ASPECT_RATIO = 0.123f;
42 const float TEST_FIELD_OF_VIEW = Radian(Degree(40.0f));
43 const float TEST_NEAR_PLANE_DISTANCE = 0.23f;
44 const float TEST_FAR_PLANE_DISTANCE = 0.973f;
46 const std::string SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME( "uLightCameraProjectionMatrix" );
47 const std::string SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME( "uLightCameraViewMatrix" );
48 const char* const RENDER_SHADOW_VERTEX_SOURCE =
49 " uniform mediump mat4 uLightCameraProjectionMatrix;\n"
50 " uniform mediump mat4 uLightCameraViewMatrix;\n"
54 " gl_Position = uProjection * uModelView * vec4(aPosition,1.0);\n"
55 " vec4 textureCoords = uLightCameraProjectionMatrix * uLightCameraViewMatrix * uModelMatrix * vec4(aPosition,1.0);\n"
56 " vTexCoord = 0.5 + 0.5 * (textureCoords.xy/textureCoords.w);\n"
59 const char* const RENDER_SHADOW_FRAGMENT_SOURCE =
60 "uniform lowp vec4 uShadowColor;\n"
63 " lowp float alpha;\n"
64 " alpha = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y)).a;\n"
65 " gl_FragColor = vec4(uShadowColor.rgb, uShadowColor.a * alpha);\n"
72 int UtcDaliCameraActorConstructorVoid(void)
74 TestApplication application;
75 tet_infoline("Testing Dali::CameraActor::CameraActor()");
79 DALI_TEST_CHECK(!actor);
83 int UtcDaliCameraActorNew(void)
85 TestApplication application;
86 tet_infoline("Testing Dali::CameraActor::New()");
88 CameraActor actor = CameraActor::New();
90 DALI_TEST_CHECK(actor);
94 DALI_TEST_CHECK(!actor);
98 int UtcDaliCameraActorDownCast(void)
100 TestApplication application;
101 tet_infoline("Testing Dali::CameraActor::DownCast()");
103 CameraActor camera = CameraActor::New();
104 Actor anActor = Actor::New();
105 anActor.Add( camera );
107 Actor child = anActor.GetChildAt(0);
108 CameraActor cameraActor = CameraActor::DownCast( child );
109 DALI_TEST_CHECK( cameraActor );
112 DALI_TEST_CHECK( !cameraActor );
114 cameraActor = DownCast< CameraActor >( child );
115 DALI_TEST_CHECK( cameraActor );
119 int UtcDaliCameraActorDownCast2(void)
121 TestApplication application;
122 tet_infoline("Testing Dali::CameraActor::DownCast()");
124 Actor actor1 = Actor::New();
125 Actor anActor = Actor::New();
128 Actor child = anActor.GetChildAt(0);
129 CameraActor cameraActor = CameraActor::DownCast( child );
130 DALI_TEST_CHECK( !cameraActor );
132 Actor unInitialzedActor;
133 cameraActor = CameraActor::DownCast( unInitialzedActor );
134 DALI_TEST_CHECK( !cameraActor );
136 cameraActor = DownCast< CameraActor >( unInitialzedActor );
137 DALI_TEST_CHECK( !cameraActor );
142 int UtcDaliCameraActorSetCameraOffStage(void)
144 TestApplication application;
145 tet_infoline("Testing Dali::CameraActor::SetCamera()");
147 CameraActor actor = CameraActor::New();
149 actor.SetType(Camera::FREE_LOOK);
150 actor.SetFieldOfView(TEST_FIELD_OF_VIEW);
151 actor.SetAspectRatio(TEST_ASPECT_RATIO);
152 actor.SetNearClippingPlane(TEST_NEAR_PLANE_DISTANCE);
153 actor.SetFarClippingPlane(TEST_FAR_PLANE_DISTANCE);
154 actor.SetProjectionMode(Camera::PERSPECTIVE_PROJECTION);
156 actor.SetInvertYAxis(false);
158 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
159 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
160 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
161 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
162 DALI_TEST_EQUALS(Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION);
163 DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
167 actor.GetProperty(CameraActor::Property::AspectRatio).Get(value);
168 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION);
169 actor.GetProperty(CameraActor::Property::FieldOfView).Get(value);
170 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION);
171 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(value);
172 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
173 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(value);
174 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
175 actor.GetProperty(CameraActor::Property::ProjectionMode).Get(sValue);
176 DALI_TEST_EQUALS("PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION);
178 actor.GetProperty(CameraActor::Property::InvertYAxis).Get(bValue);
179 DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
183 int UtcDaliCameraActorSetCameraOnStage(void)
185 TestApplication application;
186 tet_infoline("Testing Dali::CameraActor::SetCamera()");
188 CameraActor actor = CameraActor::New();
189 Stage::GetCurrent().Add(actor);
190 application.Render(0);
191 application.SendNotification();
193 actor.SetType(Camera::LOOK_AT_TARGET);
194 actor.SetFieldOfView(TEST_FIELD_OF_VIEW);
195 actor.SetAspectRatio(TEST_ASPECT_RATIO);
196 actor.SetNearClippingPlane(TEST_NEAR_PLANE_DISTANCE);
197 actor.SetFarClippingPlane(TEST_FAR_PLANE_DISTANCE);
198 actor.SetInvertYAxis(false);
200 DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
202 // Will need 2 frames to ensure both buffers are set to same values:
203 application.Render();
204 application.SendNotification();
205 application.Render();
206 application.SendNotification();
208 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
209 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
210 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
211 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
212 DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
215 actor.GetProperty(CameraActor::Property::Type).Get(sValue);
216 DALI_TEST_EQUALS(sValue, "LOOK_AT_TARGET", TEST_LOCATION);
219 actor.GetProperty(CameraActor::Property::AspectRatio).Get(value);
220 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION);
221 actor.GetProperty(CameraActor::Property::FieldOfView).Get(value);
222 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION);
223 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(value);
224 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
225 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(value);
226 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
229 actor.GetProperty(CameraActor::Property::InvertYAxis).Get(bValue);
230 DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
235 int UtcDaliCameraActorGetCamera(void)
237 TestApplication application;
238 tet_infoline("Testing Dali::CameraActor::GetCamera()");
240 CameraActor actor = CameraActor::New();
242 actor.SetAspectRatio(TEST_ASPECT_RATIO);
244 DALI_TEST_EQUALS(actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION);
246 actor.SetProperty(CameraActor::Property::Type, "FREE_LOOK");
247 actor.SetProperty(CameraActor::Property::AspectRatio, TEST_ASPECT_RATIO);
248 actor.SetProperty(CameraActor::Property::FieldOfView, TEST_FIELD_OF_VIEW);
249 actor.SetProperty(CameraActor::Property::NearPlaneDistance, TEST_NEAR_PLANE_DISTANCE);
250 actor.SetProperty(CameraActor::Property::FarPlaneDistance, TEST_FAR_PLANE_DISTANCE);
252 DALI_TEST_EQUALS(Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION);
253 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
254 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
255 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
256 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
260 int UtcDaliCameraActorDefaultProperties(void)
262 TestApplication application;
263 tet_infoline("Testing Dali::CameraActor DefaultProperties");
265 CameraActor actor = CameraActor::New();
267 actor.SetAspectRatio(TEST_ASPECT_RATIO);
268 Stage::GetCurrent().Add(actor);
269 application.Render(0);
270 application.SendNotification();
272 actor.GetProperty(CameraActor::Property::InvertYAxis).Get(bValue);
273 DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
275 std::vector<Property::Index> indices ;
276 indices.push_back(CameraActor::Property::Type);
277 indices.push_back(CameraActor::Property::ProjectionMode);
278 indices.push_back(CameraActor::Property::FieldOfView);
279 indices.push_back(CameraActor::Property::AspectRatio);
280 indices.push_back(CameraActor::Property::NearPlaneDistance);
281 indices.push_back(CameraActor::Property::FarPlaneDistance);
282 indices.push_back(CameraActor::Property::LeftPlaneDistance);
283 indices.push_back(CameraActor::Property::RightPlaneDistance);
284 indices.push_back(CameraActor::Property::TopPlaneDistance);
285 indices.push_back(CameraActor::Property::BottomPlaneDistance);
286 indices.push_back(CameraActor::Property::TargetPosition);
287 indices.push_back(CameraActor::Property::ProjectionMatrix);
288 indices.push_back(CameraActor::Property::ViewMatrix);
289 indices.push_back(CameraActor::Property::InvertYAxis);
291 DALI_TEST_CHECK(actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
293 for(std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter)
295 DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex(actor.GetPropertyName(*iter)), TEST_LOCATION);
296 DALI_TEST_CHECK( ! actor.IsPropertyAnimatable(*iter) );
300 if ( ( *iter == CameraActor::Property::ProjectionMatrix ) ||
301 ( *iter == CameraActor::Property::ViewMatrix ) )
303 DALI_TEST_CHECK( ! actor.IsPropertyWritable(*iter) );
307 DALI_TEST_CHECK( actor.IsPropertyWritable(*iter) );
311 DALI_TEST_CHECK( actor.GetPropertyType(*iter) == actor.GetPropertyType(*iter) ); // just checking call succeeds
314 // set/get one of them
315 const float newAspect = TEST_ASPECT_RATIO * 2.f;
317 actor.SetProperty( CameraActor::Property::AspectRatio, Property::Value(newAspect) );
318 application.Render();
319 application.SendNotification();
320 application.Render();
321 application.SendNotification();
323 DALI_TEST_EQUALS(actor.GetAspectRatio(), newAspect, TEST_LOCATION );
327 int UtcDaliCameraActorSetTarget(void)
329 TestApplication application;
330 tet_infoline("Testing Dali::CameraActor Get/Set Target Position");
332 CameraActor actor = CameraActor::New();
333 DALI_TEST_EQUALS( actor.GetTargetPosition(), Vector3::ZERO, TEST_LOCATION );
335 Vector3 target( 10.0f, 20.0f, 30.0f);
336 actor.SetTargetPosition( target );
338 DALI_TEST_EQUALS( actor.GetTargetPosition(), target, TEST_LOCATION );
341 actor.GetProperty(CameraActor::Property::TargetPosition).Get(value);
342 DALI_TEST_EQUALS(target, value, FLOAT_EPSILON, TEST_LOCATION);
347 int UtcDaliCameraActorSetType01(void)
349 TestApplication application;
350 tet_infoline("Testing Dali::CameraActor Get/Set Type");
352 CameraActor actor = CameraActor::New();
353 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::FREE_LOOK, TEST_LOCATION );
355 actor.SetType(Dali::Camera::LOOK_AT_TARGET);
356 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION );
359 actor.GetProperty(CameraActor::Property::Type).Get(sValue);
360 std::string result("LOOK_AT_TARGET");
361 DALI_TEST_EQUALS(result, sValue, TEST_LOCATION);
365 int UtcDaliCameraActorSetType02(void)
367 TestApplication application;
368 tet_infoline("Testing Dali::CameraActor Get/Set Type");
372 Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK ;
375 cameraType = actor.GetType();
377 catch ( Dali::DaliException& e )
379 DALI_TEST_PRINT_ASSERT( e );
380 DALI_TEST_ASSERT(e, "camera", TEST_LOCATION);
383 const CameraActor aConstActor;
387 cameraType = aConstActor.GetType();
389 catch ( Dali::DaliException& e )
391 DALI_TEST_PRINT_ASSERT( e );
392 DALI_TEST_ASSERT(e, "camera", TEST_LOCATION);
395 DALI_TEST_EQUALS((int)cameraType, (int)Dali::Camera::FREE_LOOK, TEST_LOCATION);
399 int UtcDaliCameraActorSetFieldOfView(void)
401 TestApplication application;
402 tet_infoline("Testing Dali::CameraActor Get/Set Field of view");
404 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
405 const float defaultFov = defaultCamera.GetFieldOfView();
407 CameraActor actor = CameraActor::New();
408 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFov, TEST_LOCATION );
410 float fov = Math::PI/3.0f;
411 actor.SetFieldOfView(fov);
412 DALI_TEST_EQUALS( actor.GetFieldOfView(), fov, TEST_LOCATION );
415 actor.GetProperty(CameraActor::Property::FieldOfView).Get(value);
416 DALI_TEST_EQUALS(fov, value, FLOAT_EPSILON, TEST_LOCATION);
420 int UtcDaliCameraActorSetAspectRatio(void)
422 TestApplication application;
423 tet_infoline("Testing Dali::CameraActor Get/Set Aspect Ratio");
425 CameraActor actor = CameraActor::New();
426 DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
428 float aspect = 16.0f/9.0f;
429 actor.SetAspectRatio(aspect);
430 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
433 actor.GetProperty(CameraActor::Property::AspectRatio).Get(value);
434 DALI_TEST_EQUALS(aspect, value, FLOAT_EPSILON, TEST_LOCATION);
438 int UtcDaliCameraActorSetNearClippingPlane(void)
440 TestApplication application;
441 tet_infoline("Testing Dali::CameraActor Get/Set Near clipping plane");
443 CameraActor actor = CameraActor::New();
444 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 800.0f, TEST_LOCATION );
446 actor.SetNearClippingPlane(400.0f);
447 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
450 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(value);
451 DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
455 int UtcDaliCameraActorSetFarClippingPlane(void)
457 TestApplication application;
458 tet_infoline("Testing Dali::CameraActor Get/Set Far clipping plane");
460 CameraActor actor = CameraActor::New();
461 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 800.0f + (0xFFFF>>4), TEST_LOCATION );
463 actor.SetFarClippingPlane(4000.0f);
464 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
467 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(value);
468 DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
472 int UtcDaliCameraActorSetTargetPosition(void)
474 TestApplication application;
475 tet_infoline("Testing Dali::CameraActor Get/Set Target Position");
477 CameraActor actor = CameraActor::New();
478 DALI_TEST_EQUALS( actor.GetTargetPosition(), Vector3::ZERO, TEST_LOCATION );
480 Vector3 target( 10.0f, 20.0f, 30.0f);
481 actor.SetTargetPosition( target );
483 DALI_TEST_EQUALS( actor.GetTargetPosition(), target, TEST_LOCATION );
486 actor.GetProperty(CameraActor::Property::TargetPosition).Get(value);
487 DALI_TEST_EQUALS(target, value, FLOAT_EPSILON, TEST_LOCATION);
491 int UtcDaliCameraActorSetInvertYAxis(void)
493 TestApplication application;
494 tet_infoline("Testing Dali::CameraActor Get/Set InvertYAxis");
496 CameraActor actor = CameraActor::New();
497 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
499 actor.SetInvertYAxis(true);
501 DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
504 actor.GetProperty(CameraActor::Property::InvertYAxis).Get(bValue);
505 DALI_TEST_EQUALS(true, bValue, TEST_LOCATION);
509 int UtcDaliCameraActorModelView(void)
511 TestApplication application;
512 tet_infoline("Testing Dali::CameraActor Test view application");
514 BufferImage image = CreateBufferImage();
516 ImageActor actor = ImageActor::New( image );
517 actor.SetSize( 100.0f, 100.0f );
518 actor.SetPosition(20.0f, 30.0f, 40.0f);
519 actor.SetParentOrigin(ParentOrigin::CENTER);
520 Stage::GetCurrent().Add(actor);
522 application.SendNotification();
523 application.Render(0);
524 application.Render();
525 application.SendNotification();
527 Matrix resultMatrix(true);
528 resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentPosition());
530 RenderTask task = Stage::GetCurrent().GetRenderTaskList().GetTask(0);
531 CameraActor cameraActor = task.GetCameraActor();
533 Matrix viewMatrix(false);
534 cameraActor.GetProperty(CameraActor::Property::ViewMatrix).Get( viewMatrix );
535 Matrix::Multiply(resultMatrix, resultMatrix, viewMatrix);
537 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
541 int UtcDaliCameraActorSetPerspectiveProjection(void)
543 TestApplication application;
544 tet_infoline("Testing Dali::CameraActor::SetPerspectiveProjection( const Size& size )");
546 CameraActor actor = CameraActor::New();
547 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
549 DALI_TEST_CHECK(actor);
552 actor.GetProperty(CameraActor::Property::AspectRatio).Get(value);
553 DALI_TEST_EQUALS(0.666666f, value, FLOAT_EPSILON, TEST_LOCATION);
554 actor.GetProperty(CameraActor::Property::FieldOfView).Get(value);
555 DALI_TEST_EQUALS(0.489957f, value, FLOAT_EPSILON, TEST_LOCATION);
556 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(value);
557 DALI_TEST_EQUALS(150.f, value, FLOAT_EPSILON, TEST_LOCATION);
558 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(value);
559 DALI_TEST_EQUALS(4245.f, value, FLOAT_EPSILON, TEST_LOCATION);
561 DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
563 std::string stringValue;
564 actor.GetProperty(CameraActor::Property::ProjectionMode).Get(stringValue);
565 DALI_TEST_EQUALS(stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION);
569 int UtcDaliCameraActorSetOrthographicProjection01(void)
571 TestApplication application;
572 tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection01()");
574 CameraActor actor = CameraActor::New(Size(1080.0f, 1920.0f));
575 DALI_TEST_CHECK(actor);
577 Stage::GetCurrent().Add( actor );
579 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
580 application.SendNotification();
581 application.Render(0);
582 application.Render();
583 application.SendNotification();
585 float defaultAspectRatio;
586 float defaultFieldOfView;
587 float defaultNearPlaneDistance;
588 float defaultFarPlaneDistance;
589 actor.GetProperty(CameraActor::Property::AspectRatio).Get(defaultAspectRatio);
590 actor.GetProperty(CameraActor::Property::FieldOfView).Get(defaultFieldOfView);
591 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(defaultNearPlaneDistance);
592 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(defaultFarPlaneDistance);
593 Vector3 defaultPos = actor.GetCurrentPosition();
595 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
597 application.SendNotification();
598 application.Render(0);
599 application.Render();
600 application.SendNotification();
603 actor.GetProperty(CameraActor::Property::AspectRatio).Get(value);
604 DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
605 actor.GetProperty(CameraActor::Property::FieldOfView).Get(value);
606 DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
607 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(value);
608 DALI_TEST_EQUALS(defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
609 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(value);
610 DALI_TEST_EQUALS(defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
612 actor.GetProperty(CameraActor::Property::LeftPlaneDistance).Get(value);
613 DALI_TEST_EQUALS(-540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
614 actor.GetProperty(CameraActor::Property::RightPlaneDistance).Get(value);
615 DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
616 actor.GetProperty(CameraActor::Property::TopPlaneDistance).Get(value);
617 DALI_TEST_EQUALS(960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
618 actor.GetProperty(CameraActor::Property::BottomPlaneDistance).Get(value);
619 DALI_TEST_EQUALS(-960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
621 Vector3 pos = actor.GetCurrentPosition();
622 DALI_TEST_EQUALS(defaultPos.z, pos.z, 0.001f, TEST_LOCATION);
624 DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
629 int UtcDaliCameraActorSetOrthographicProjection02(void)
631 TestApplication application;
632 tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection02()");
634 CameraActor actor = CameraActor::New();
635 DALI_TEST_CHECK(actor);
637 float defaultAspectRatio;
638 float defaultFieldOfView;
639 float defaultNearPlaneDistance;
640 float defaultFarPlaneDistance;
641 actor.GetProperty(CameraActor::Property::AspectRatio).Get(defaultAspectRatio);
642 actor.GetProperty(CameraActor::Property::FieldOfView).Get(defaultFieldOfView);
643 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(defaultNearPlaneDistance);
644 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(defaultFarPlaneDistance);
646 actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
649 actor.GetProperty(CameraActor::Property::AspectRatio).Get(value);
650 DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
651 actor.GetProperty(CameraActor::Property::FieldOfView).Get(value);
652 DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
653 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(value);
654 DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
655 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(value);
656 DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
658 actor.GetProperty(CameraActor::Property::LeftPlaneDistance).Get(value);
659 DALI_TEST_EQUALS(-100.0f, value, FLOAT_EPSILON, TEST_LOCATION);
660 actor.GetProperty(CameraActor::Property::RightPlaneDistance).Get(value);
661 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION);
662 actor.GetProperty(CameraActor::Property::TopPlaneDistance).Get(value);
663 DALI_TEST_EQUALS(-300.0f, value, FLOAT_EPSILON, TEST_LOCATION);
664 actor.GetProperty(CameraActor::Property::BottomPlaneDistance).Get(value);
665 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION);
667 DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
673 int UtcDaliCameraActorSetOrthographicProjection03(void)
675 TestApplication application;
676 tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection03()");
678 CameraActor actor = CameraActor::New();
679 DALI_TEST_CHECK(actor);
681 float defaultAspectRatio;
682 float defaultFieldOfView;
683 float defaultNearPlaneDistance;
684 float defaultFarPlaneDistance;
685 actor.GetProperty(CameraActor::Property::AspectRatio).Get(defaultAspectRatio);
686 actor.GetProperty(CameraActor::Property::FieldOfView).Get(defaultFieldOfView);
687 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(defaultNearPlaneDistance);
688 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(defaultFarPlaneDistance);
690 actor.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
692 actor.SetProperty(CameraActor::Property::LeftPlaneDistance, -100.0f);
693 actor.SetProperty(CameraActor::Property::RightPlaneDistance, 200.0f);
694 actor.SetProperty(CameraActor::Property::TopPlaneDistance, -300.0f);
695 actor.SetProperty(CameraActor::Property::BottomPlaneDistance, 500.0f);
696 actor.SetNearClippingPlane( 400.0f );
697 actor.SetFarClippingPlane( 4000.0f );
700 actor.GetProperty(CameraActor::Property::AspectRatio).Get(value);
701 DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
702 actor.GetProperty(CameraActor::Property::FieldOfView).Get(value);
703 DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
704 actor.GetProperty(CameraActor::Property::NearPlaneDistance).Get(value);
705 DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
706 actor.GetProperty(CameraActor::Property::FarPlaneDistance).Get(value);
707 DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
709 actor.GetProperty(CameraActor::Property::LeftPlaneDistance).Get(value);
710 DALI_TEST_EQUALS(-100.0f, value, FLOAT_EPSILON, TEST_LOCATION);
711 actor.GetProperty(CameraActor::Property::RightPlaneDistance).Get(value);
712 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION);
713 actor.GetProperty(CameraActor::Property::TopPlaneDistance).Get(value);
714 DALI_TEST_EQUALS(-300.0f, value, FLOAT_EPSILON, TEST_LOCATION);
715 actor.GetProperty(CameraActor::Property::BottomPlaneDistance).Get(value);
716 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION);
718 DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
719 std::string stringValue;
720 actor.GetProperty(CameraActor::Property::ProjectionMode).Get(stringValue);
721 DALI_TEST_EQUALS(stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION);
727 int UtcDaliCameraActorReadProjectionMatrix(void)
729 TestApplication application;
730 tet_infoline("Testing Dali::CameraActor::ReadProjectionMatrix()");
732 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask(0u).GetCameraActor();
733 application.SendNotification();
734 application.Render(0);
735 application.Render();
736 application.SendNotification();
737 Image image = CreateBufferImage();
738 ImageActor imageActor = ImageActor::New( image );
739 imageActor.SetSize(100.0f, 100.0f);
740 Stage::GetCurrent().Add(imageActor);
742 Matrix projectionMatrix;
745 camera.GetProperty(CameraActor::CameraActor::Property::ProjectionMatrix).Get(projectionMatrix);
746 camera.GetProperty(CameraActor::CameraActor::Property::ViewMatrix).Get(viewMatrix);
748 ShaderEffect shaderEffect = ShaderEffect::New( RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE);
749 imageActor.SetShaderEffect(shaderEffect);
751 shaderEffect.SetUniform( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
752 shaderEffect.SetUniform( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
754 Property::Index projectionMatrixPropertyIndex = shaderEffect.GetPropertyIndex(SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME);
755 Property::Index viewMatrixPropertyIndex = shaderEffect.GetPropertyIndex(SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME);
757 Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( projectionMatrixPropertyIndex, Source( camera, CameraActor::Property::ProjectionMatrix ), EqualToConstraint());
758 Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( viewMatrixPropertyIndex, Source( camera, CameraActor::Property::ViewMatrix ), EqualToConstraint());
760 shaderEffect.ApplyConstraint(projectionMatrixConstraint);
761 shaderEffect.ApplyConstraint(viewMatrixConstraint);
763 application.SendNotification();
764 application.Render();
766 // Test effects of Constraint.
767 DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue(SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix));
769 DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue(SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix));
773 int UtcDaliCameraActorAnimatedProperties(void)
775 TestApplication application;
776 tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
778 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask(0u).GetCameraActor();
779 Actor actor = Actor::New();
780 actor.SetSize(100.0f, 100.0f);
781 Stage::GetCurrent().Add(actor);
783 actor.ApplyConstraint(Constraint::New<Dali::Vector3>( Actor::Property::Position, Source( camera, Actor::Property::Position), EqualToConstraint()));
785 camera.SetPosition(100.0f, 200.0f, 300.0f);
786 application.SendNotification();
787 application.Render();
789 DALI_TEST_EQUALS( actor.GetCurrentPosition(), Vector3(100.0f, 200.0f, 300.0f), TEST_LOCATION);
793 int UtcDaliCameraActorPropertyIndices(void)
795 TestApplication application;
796 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask(0u).GetCameraActor();
798 Actor basicActor = Actor::New();
799 Property::IndexContainer indices;
800 camera.GetPropertyIndices( indices );
801 DALI_TEST_CHECK( indices.size() > basicActor.GetPropertyCount() );
802 DALI_TEST_EQUALS( indices.size(), camera.GetPropertyCount(), TEST_LOCATION );
806 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
808 TestApplication application;
809 Stage stage = Stage::GetCurrent();
810 Vector2 stageSize = stage.GetSize();
812 CameraActor freeLookCameraActor = CameraActor::New(stageSize);
813 freeLookCameraActor.SetParentOrigin(ParentOrigin::CENTER);
814 freeLookCameraActor.SetType(Camera::FREE_LOOK);
816 Vector3 targetPosition(30.0f, 240.0f, -256.0f);
817 Actor target = Actor::New();
818 target.SetParentOrigin(ParentOrigin::CENTER);
819 target.SetPosition(targetPosition);
821 Constraint cameraOrientationConstraint =
822 Constraint::New<Quaternion> ( Actor::Property::Rotation,
823 Source( target, Actor::Property::WorldPosition ),
824 Source( freeLookCameraActor, Actor::Property::WorldPosition ),
825 Source( target, Actor::Property::WorldRotation ),
827 freeLookCameraActor.ApplyConstraint( cameraOrientationConstraint );
829 CameraActor lookAtCameraActor = CameraActor::New(stageSize);
830 lookAtCameraActor.SetType(Camera::LOOK_AT_TARGET);
831 lookAtCameraActor.SetTargetPosition(targetPosition);
832 lookAtCameraActor.SetParentOrigin(ParentOrigin::CENTER);
835 stage.Add(freeLookCameraActor);
836 stage.Add(lookAtCameraActor);
838 // Create an arbitrary vector
839 for( float x=-1.0f; x<=1.0f; x+=0.1f )
841 for( float y=-1.0f; y<1.0f; y+=0.1f )
843 for( float z=-1.0f; z<1.0f; z+=0.1f )
845 Vector3 position(x, y, z);
846 position.Normalize();
849 freeLookCameraActor.SetPosition(position);
850 lookAtCameraActor.SetPosition(position);
852 application.SendNotification();
853 application.Render();
854 application.SendNotification();
855 application.Render();
856 Matrix freeLookViewMatrix;
857 Matrix lookAtViewMatrix;
858 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::ViewMatrix).Get(freeLookViewMatrix);
859 lookAtCameraActor.GetProperty(CameraActor::CameraActor::Property::ViewMatrix).Get(lookAtViewMatrix);
861 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
868 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
870 TestApplication application;
871 Stage stage = Stage::GetCurrent();
872 Vector2 stageSize = stage.GetSize();
874 CameraActor freeLookCameraActor = CameraActor::New(stageSize);
875 freeLookCameraActor.SetParentOrigin(ParentOrigin::CENTER);
876 freeLookCameraActor.SetType(Camera::FREE_LOOK);
878 Vector3 targetPosition(30.0f, 240.0f, -256.0f);
879 Actor target = Actor::New();
880 target.SetParentOrigin(ParentOrigin::CENTER);
881 target.SetPosition(targetPosition);
883 Constraint cameraOrientationConstraint =
884 Constraint::New<Quaternion> ( Actor::Property::Rotation,
885 Source( target, Actor::Property::WorldPosition ),
886 Source( freeLookCameraActor, Actor::Property::WorldPosition ),
887 Source( target, Actor::Property::WorldRotation ),
889 freeLookCameraActor.ApplyConstraint( cameraOrientationConstraint );
891 CameraActor lookAtCameraActor = CameraActor::New(stageSize);
892 lookAtCameraActor.SetType(Camera::LOOK_AT_TARGET);
893 lookAtCameraActor.SetTargetPosition(targetPosition);
894 lookAtCameraActor.SetParentOrigin(ParentOrigin::CENTER);
897 stage.Add(freeLookCameraActor);
898 stage.Add(lookAtCameraActor);
900 // Create an arbitrary vector
901 for( float x=-1.0f; x<=1.0f; x+=0.1f )
903 for( float y=-1.0f; y<1.0f; y+=0.1f )
905 for( float z=-1.0f; z<1.0f; z+=0.1f )
907 Vector3 position(x, y, z);
908 position.Normalize();
911 freeLookCameraActor.SetPosition(position);
912 lookAtCameraActor.SetPosition(position);
914 application.SendNotification();
915 application.Render();
916 application.SendNotification();
917 application.Render();
918 Matrix freeLookViewMatrix;
919 Matrix lookAtViewMatrix;
920 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::ViewMatrix).Get(freeLookViewMatrix);
921 lookAtCameraActor.GetProperty(CameraActor::CameraActor::Property::ViewMatrix).Get(lookAtViewMatrix);
923 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
925 Matrix freeLookTest(false);
926 Matrix::Multiply(freeLookTest, freeLookViewMatrix, freeLookWorld);
927 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION);
929 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
936 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
938 TestApplication application;
939 Stage stage = Stage::GetCurrent();
940 Vector2 stageSize = stage.GetSize();
942 Vector3 targetPosition(Vector3::ZERO);
944 Vector3 cameraOffset( 0.f, 0.f, 100.f );
946 CameraActor freeLookCameraActor = CameraActor::New(stageSize);
947 freeLookCameraActor.SetType(Camera::FREE_LOOK);
948 freeLookCameraActor.SetParentOrigin(ParentOrigin::CENTER);
950 Quaternion cameraOrientation( Radian(Degree(180.f)), Vector3::YAXIS );
951 freeLookCameraActor.SetPosition(cameraOffset);
952 freeLookCameraActor.SetRotation(cameraOrientation);
954 Actor cameraAnchor = Actor::New();
955 cameraAnchor.Add(freeLookCameraActor);
956 stage.Add(cameraAnchor);
958 for( float angle = 1.f; angle <= 180.f; angle += 1.f )
960 Quaternion rotation(Radian(Degree(angle)), Vector3::YAXIS);
962 freeLookCameraActor.SetPosition( rotation.Rotate( cameraOffset ) );
963 cameraAnchor.SetRotation( rotation );
965 application.SendNotification();
966 application.Render();
967 application.SendNotification();
968 application.Render();
970 Matrix freeLookViewMatrix;
971 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::ViewMatrix).Get(freeLookViewMatrix);
973 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
975 Matrix freeLookTest(false);
976 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld);
977 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION);