Revert "License conversion from Flora to Apache 2.0"
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-CameraActor.cpp
1 //
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 #include <iostream>
18
19 #include <stdlib.h>
20 #include <dali/dali.h>
21
22 #include "dali-test-suite-utils/dali-test-suite-utils.h"
23
24 using namespace Dali;
25
26 void camera_actor_test_startup(void)
27 {
28   test_return_value = TET_UNDEF;
29 }
30
31 void camera_actor_test_cleanup(void)
32 {
33   test_return_value = TET_PASS;
34 }
35
36
37 namespace
38 {
39 const float FLOAT_EPSILON = 0.001f;
40 const float TEST_ASPECT_RATIO = 0.123f;
41 const float TEST_FIELD_OF_VIEW = Radian(Degree(40.0f));
42 const float TEST_NEAR_PLANE_DISTANCE = 0.23f;
43 const float TEST_FAR_PLANE_DISTANCE = 0.973f;
44
45 const std::string SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME( "uLightCameraProjectionMatrix" );
46 const std::string SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME( "uLightCameraViewMatrix" );
47 const char* const RENDER_SHADOW_VERTEX_SOURCE =
48   " uniform mediump mat4 uLightCameraProjectionMatrix;\n"
49   " uniform mediump mat4 uLightCameraViewMatrix;\n"
50   "\n"
51   "void main()\n"
52   "{\n"
53   "  gl_Position = uProjection * uModelView * vec4(aPosition,1.0);\n"
54   "  vec4 textureCoords = uLightCameraProjectionMatrix * uLightCameraViewMatrix * uModelMatrix  * vec4(aPosition,1.0);\n"
55   "  vTexCoord = 0.5 + 0.5 * (textureCoords.xy/textureCoords.w);\n"
56   "}\n";
57
58 const char* const RENDER_SHADOW_FRAGMENT_SOURCE =
59   "uniform lowp vec4 uShadowColor;\n"
60   "void main()\n"
61   "{\n"
62   "  lowp float alpha;\n"
63   "  alpha = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y)).a;\n"
64   "  gl_FragColor = vec4(uShadowColor.rgb, uShadowColor.a * alpha);\n"
65   "}\n";
66
67
68 } // anon namespace
69
70
71 int UtcDaliCameraActorConstructorVoid(void)
72 {
73   TestApplication application;
74   tet_infoline("Testing Dali::CameraActor::CameraActor()");
75
76   CameraActor actor;
77
78   DALI_TEST_CHECK(!actor);
79   END_TEST;
80 }
81
82 int UtcDaliCameraActorNew(void)
83 {
84   TestApplication application;
85   tet_infoline("Testing Dali::CameraActor::New()");
86
87   CameraActor actor = CameraActor::New();
88
89   DALI_TEST_CHECK(actor);
90
91   actor = NULL;
92
93   DALI_TEST_CHECK(!actor);
94   END_TEST;
95 }
96
97 int UtcDaliCameraActorDownCast(void)
98 {
99   TestApplication application;
100   tet_infoline("Testing Dali::CameraActor::DownCast()");
101
102   CameraActor camera = CameraActor::New();
103   Actor anActor = Actor::New();
104   anActor.Add( camera );
105
106   Actor child = anActor.GetChildAt(0);
107   CameraActor cameraActor = CameraActor::DownCast( child );
108   DALI_TEST_CHECK( cameraActor );
109
110   cameraActor = NULL;
111   DALI_TEST_CHECK( !cameraActor );
112
113   cameraActor = DownCast< CameraActor >( child );
114   DALI_TEST_CHECK( cameraActor );
115   END_TEST;
116 }
117
118 int UtcDaliCameraActorDownCast2(void)
119 {
120   TestApplication application;
121   tet_infoline("Testing Dali::CameraActor::DownCast()");
122
123   Actor actor1 = Actor::New();
124   Actor anActor = Actor::New();
125   anActor.Add(actor1);
126
127   Actor child = anActor.GetChildAt(0);
128   CameraActor cameraActor = CameraActor::DownCast( child );
129   DALI_TEST_CHECK( !cameraActor );
130
131   Actor unInitialzedActor;
132   cameraActor = CameraActor::DownCast( unInitialzedActor );
133   DALI_TEST_CHECK( !cameraActor );
134
135   cameraActor = DownCast< CameraActor >( unInitialzedActor );
136   DALI_TEST_CHECK( !cameraActor );
137   END_TEST;
138 }
139
140
141 int UtcDaliCameraActorSetCameraOffStage(void)
142 {
143   TestApplication application;
144   tet_infoline("Testing Dali::CameraActor::SetCamera()");
145
146   CameraActor actor = CameraActor::New();
147
148   actor.SetType(Camera::FREE_LOOK);
149   actor.SetFieldOfView(TEST_FIELD_OF_VIEW);
150   actor.SetAspectRatio(TEST_ASPECT_RATIO);
151   actor.SetNearClippingPlane(TEST_NEAR_PLANE_DISTANCE);
152   actor.SetFarClippingPlane(TEST_FAR_PLANE_DISTANCE);
153   actor.SetProjectionMode(Camera::PERSPECTIVE_PROJECTION);
154
155   actor.SetInvertYAxis(false);
156
157   DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
158   DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
159   DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
160   DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
161   DALI_TEST_EQUALS(Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION);
162   DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
163
164   float value;
165   std::string sValue;
166   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(value);
167   DALI_TEST_EQUALS(TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION);
168   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(value);
169   DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION);
170   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(value);
171   DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
172   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(value);
173   DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
174   actor.GetProperty(CameraActor::PROJECTION_MODE).Get(sValue);
175   DALI_TEST_EQUALS("PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION);
176   bool bValue;
177   actor.GetProperty(CameraActor::INVERT_Y_AXIS).Get(bValue);
178   DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
179   END_TEST;
180 }
181
182 int UtcDaliCameraActorSetCameraOnStage(void)
183 {
184   TestApplication application;
185   tet_infoline("Testing Dali::CameraActor::SetCamera()");
186
187   CameraActor actor = CameraActor::New();
188   Stage::GetCurrent().Add(actor);
189   application.Render(0);
190   application.SendNotification();
191
192   actor.SetType(Camera::LOOK_AT_TARGET);
193   actor.SetFieldOfView(TEST_FIELD_OF_VIEW);
194   actor.SetAspectRatio(TEST_ASPECT_RATIO);
195   actor.SetNearClippingPlane(TEST_NEAR_PLANE_DISTANCE);
196   actor.SetFarClippingPlane(TEST_FAR_PLANE_DISTANCE);
197   actor.SetInvertYAxis(false);
198
199   DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
200
201   // Will need 2 frames to ensure both buffers are set to same values:
202   application.Render();
203   application.SendNotification();
204   application.Render();
205   application.SendNotification();
206
207   DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
208   DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
209   DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
210   DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
211   DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
212
213   std::string sValue;
214   actor.GetProperty(CameraActor::TYPE).Get(sValue);
215   DALI_TEST_EQUALS(sValue, "LOOK_AT_TARGET", TEST_LOCATION);
216
217   float value;
218   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(value);
219   DALI_TEST_EQUALS(TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION);
220   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(value);
221   DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION);
222   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(value);
223   DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
224   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(value);
225   DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
226
227   bool bValue;
228   actor.GetProperty(CameraActor::INVERT_Y_AXIS).Get(bValue);
229   DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
230   END_TEST;
231 }
232
233
234 int UtcDaliCameraActorGetCamera(void)
235 {
236   TestApplication application;
237   tet_infoline("Testing Dali::CameraActor::GetCamera()");
238
239   CameraActor actor = CameraActor::New();
240
241   actor.SetAspectRatio(TEST_ASPECT_RATIO);
242
243   DALI_TEST_EQUALS(actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION);
244
245   actor.SetProperty(CameraActor::TYPE, "FREE_LOOK");
246   actor.SetProperty(CameraActor::ASPECT_RATIO, TEST_ASPECT_RATIO);
247   actor.SetProperty(CameraActor::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW);
248   actor.SetProperty(CameraActor::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE);
249   actor.SetProperty(CameraActor::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE);
250
251   DALI_TEST_EQUALS(Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION);
252   DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
253   DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
254   DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
255   DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
256   END_TEST;
257 }
258
259 int UtcDaliCameraActorDefaultProperties(void)
260 {
261   TestApplication application;
262   tet_infoline("Testing Dali::CameraActor DefaultProperties");
263
264   CameraActor actor = CameraActor::New();
265
266   actor.SetAspectRatio(TEST_ASPECT_RATIO);
267   Stage::GetCurrent().Add(actor);
268   application.Render(0);
269   application.SendNotification();
270   bool bValue;
271   actor.GetProperty(CameraActor::INVERT_Y_AXIS).Get(bValue);
272   DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
273
274   std::vector<Property::Index> indices ;
275   indices.push_back(CameraActor::TYPE);
276   indices.push_back(CameraActor::PROJECTION_MODE);
277   indices.push_back(CameraActor::FIELD_OF_VIEW       );
278   indices.push_back(CameraActor::ASPECT_RATIO    );
279   indices.push_back(CameraActor::NEAR_PLANE_DISTANCE      );
280   indices.push_back(CameraActor::FAR_PLANE_DISTANCE       );
281   indices.push_back(CameraActor::LEFT_PLANE_DISTANCE      );
282   indices.push_back(CameraActor::RIGHT_PLANE_DISTANCE       );
283   indices.push_back(CameraActor::TOP_PLANE_DISTANCE      );
284   indices.push_back(CameraActor::BOTTOM_PLANE_DISTANCE       );
285   indices.push_back(CameraActor::TARGET_POSITION );
286   indices.push_back(CameraActor::PROJECTION_MATRIX );
287   indices.push_back(CameraActor::VIEW_MATRIX);
288   indices.push_back(CameraActor::INVERT_Y_AXIS );
289
290   DALI_TEST_CHECK(actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
291
292   for(std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter)
293   {
294     DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex(actor.GetPropertyName(*iter)), TEST_LOCATION);
295     DALI_TEST_CHECK( ! actor.IsPropertyAnimatable(*iter) );
296
297     switch(*iter)
298     {
299       if ( ( *iter == CameraActor::PROJECTION_MATRIX ) ||
300            ( *iter == CameraActor::VIEW_MATRIX ) )
301       {
302         DALI_TEST_CHECK( ! actor.IsPropertyWritable(*iter) );
303       }
304       else
305       {
306         DALI_TEST_CHECK( actor.IsPropertyWritable(*iter) );
307       }
308     }
309
310     DALI_TEST_CHECK( actor.GetPropertyType(*iter) == actor.GetPropertyType(*iter) ); // just checking call succeeds
311   }
312
313   // set/get one of them
314   const float newAspect = TEST_ASPECT_RATIO * 2.f;
315
316   actor.SetProperty( CameraActor::ASPECT_RATIO, Property::Value(newAspect) );
317   application.Render();
318   application.SendNotification();
319   application.Render();
320   application.SendNotification();
321
322   DALI_TEST_EQUALS(actor.GetAspectRatio(), newAspect, TEST_LOCATION );
323   END_TEST;
324 }
325
326 int UtcDaliCameraActorSetTarget(void)
327 {
328   TestApplication application;
329   tet_infoline("Testing Dali::CameraActor Get/Set Target Position");
330
331   CameraActor actor = CameraActor::New();
332   DALI_TEST_EQUALS( actor.GetTargetPosition(), Vector3::ZERO, TEST_LOCATION );
333
334   Vector3 target( 10.0f, 20.0f, 30.0f);
335   actor.SetTargetPosition( target );
336
337   DALI_TEST_EQUALS( actor.GetTargetPosition(), target, TEST_LOCATION );
338
339   Vector3 value;
340   actor.GetProperty(CameraActor::TARGET_POSITION).Get(value);
341   DALI_TEST_EQUALS(target, value, FLOAT_EPSILON, TEST_LOCATION);
342   END_TEST;
343 }
344
345
346 int UtcDaliCameraActorSetType01(void)
347 {
348   TestApplication application;
349   tet_infoline("Testing Dali::CameraActor Get/Set Type");
350
351   CameraActor actor = CameraActor::New();
352   DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION );
353
354   actor.SetType(Dali::Camera::FREE_LOOK);
355   DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::FREE_LOOK, TEST_LOCATION );
356
357   std::string sValue;
358   actor.GetProperty(CameraActor::TYPE).Get(sValue);
359   std::string result("FREE_LOOK");
360   DALI_TEST_EQUALS(result, sValue, TEST_LOCATION);
361   END_TEST;
362 }
363
364 int UtcDaliCameraActorSetType02(void)
365 {
366   TestApplication application;
367   tet_infoline("Testing Dali::CameraActor Get/Set Type");
368
369   CameraActor actor;
370
371   Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK ;
372   try
373   {
374     cameraType = actor.GetType();
375   }
376   catch ( Dali::DaliException& e )
377   {
378     tet_printf("Assertion %s test at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
379     DALI_TEST_ASSERT(e, "camera", TEST_LOCATION);
380   }
381
382   const CameraActor aConstActor;
383
384   try
385   {
386     cameraType = aConstActor.GetType();
387   }
388   catch ( Dali::DaliException& e )
389   {
390     tet_printf("Assertion %s test at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
391     DALI_TEST_ASSERT(e, "camera", TEST_LOCATION);
392   }
393
394   DALI_TEST_EQUALS((int)cameraType, (int)Dali::Camera::FREE_LOOK, TEST_LOCATION);
395   END_TEST;
396 }
397
398 int UtcDaliCameraActorSetFieldOfView(void)
399 {
400   TestApplication application;
401   tet_infoline("Testing Dali::CameraActor Get/Set Field of view");
402
403   CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
404   const float defaultFov = defaultCamera.GetFieldOfView();
405
406   CameraActor actor = CameraActor::New();
407   DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFov, TEST_LOCATION );
408
409   float fov = Math::PI/3.0f;
410   actor.SetFieldOfView(fov);
411   DALI_TEST_EQUALS( actor.GetFieldOfView(), fov, TEST_LOCATION );
412
413   float value;
414   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(value);
415   DALI_TEST_EQUALS(fov, value, FLOAT_EPSILON, TEST_LOCATION);
416   END_TEST;
417 }
418
419 int UtcDaliCameraActorSetAspectRatio(void)
420 {
421   TestApplication application;
422   tet_infoline("Testing Dali::CameraActor Get/Set Aspect Ratio");
423
424   CameraActor actor = CameraActor::New();
425   DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
426
427   float aspect = 16.0f/9.0f;
428   actor.SetAspectRatio(aspect);
429   DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
430
431   float value;
432   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(value);
433   DALI_TEST_EQUALS(aspect, value, FLOAT_EPSILON, TEST_LOCATION);
434   END_TEST;
435 }
436
437 int UtcDaliCameraActorSetNearClippingPlane(void)
438 {
439   TestApplication application;
440   tet_infoline("Testing Dali::CameraActor Get/Set Near clipping plane");
441
442   CameraActor actor = CameraActor::New();
443   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 800.0f, TEST_LOCATION );
444
445   actor.SetNearClippingPlane(400.0f);
446   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
447
448   float value;
449   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(value);
450   DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
451   END_TEST;
452 }
453
454 int UtcDaliCameraActorSetFarClippingPlane(void)
455 {
456   TestApplication application;
457   tet_infoline("Testing Dali::CameraActor Get/Set Far clipping plane");
458
459   CameraActor actor = CameraActor::New();
460   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 800.0f + (0xFFFF>>4), TEST_LOCATION );
461
462   actor.SetFarClippingPlane(4000.0f);
463   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
464
465   float value;
466   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(value);
467   DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
468   END_TEST;
469 }
470
471 int UtcDaliCameraActorSetTargetPosition(void)
472 {
473   TestApplication application;
474   tet_infoline("Testing Dali::CameraActor Get/Set Target Position");
475
476   CameraActor actor = CameraActor::New();
477   DALI_TEST_EQUALS( actor.GetTargetPosition(), Vector3::ZERO, TEST_LOCATION );
478
479   Vector3 target( 10.0f, 20.0f, 30.0f);
480   actor.SetTargetPosition( target );
481
482   DALI_TEST_EQUALS( actor.GetTargetPosition(), target, TEST_LOCATION );
483
484   Vector3 value;
485   actor.GetProperty(CameraActor::TARGET_POSITION).Get(value);
486   DALI_TEST_EQUALS(target, value, FLOAT_EPSILON, TEST_LOCATION);
487   END_TEST;
488 }
489
490 int UtcDaliCameraActorSetInvertYAxis(void)
491 {
492   TestApplication application;
493   tet_infoline("Testing Dali::CameraActor Get/Set InvertYAxis");
494
495   CameraActor actor = CameraActor::New();
496   DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
497
498   actor.SetInvertYAxis(true);
499
500   DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
501
502   bool bValue;
503   actor.GetProperty(CameraActor::INVERT_Y_AXIS).Get(bValue);
504   DALI_TEST_EQUALS(true, bValue, TEST_LOCATION);
505   END_TEST;
506 }
507
508 int UtcDaliCameraActorModelView(void)
509 {
510   TestApplication application;
511   tet_infoline("Testing Dali::CameraActor Test view application");
512
513   BitmapImage image = CreateBitmapImage();
514
515   ImageActor actor = ImageActor::New( image );
516   actor.SetSize( 100.0f, 100.0f );
517   actor.SetPosition(20.0f, 30.0f, 40.0f);
518   actor.SetParentOrigin(ParentOrigin::CENTER);
519   Stage::GetCurrent().Add(actor);
520
521   application.SendNotification();
522   application.Render(0);
523   application.Render();
524   application.SendNotification();
525
526   Matrix resultMatrix(true);
527   resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentPosition());
528
529   RenderTask task = Stage::GetCurrent().GetRenderTaskList().GetTask(0);
530   CameraActor cameraActor = task.GetCameraActor();
531
532   Matrix viewMatrix(false);
533   cameraActor.GetProperty(CameraActor::VIEW_MATRIX).Get( viewMatrix );
534   Matrix::Multiply(resultMatrix, resultMatrix, viewMatrix);
535
536   DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
537   END_TEST;
538 }
539
540 int UtcDaliCameraActorSetPerspectiveProjection(void)
541 {
542   TestApplication application;
543   tet_infoline("Testing Dali::CameraActor::SetPerspectiveProjection( const Size& size )");
544
545   CameraActor actor = CameraActor::New();
546   actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
547
548   DALI_TEST_CHECK(actor);
549
550   float value;
551   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(value);
552   DALI_TEST_EQUALS(0.666666f, value, FLOAT_EPSILON, TEST_LOCATION);
553   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(value);
554   DALI_TEST_EQUALS(0.489957f, value, FLOAT_EPSILON, TEST_LOCATION);
555   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(value);
556   DALI_TEST_EQUALS(150.f, value, FLOAT_EPSILON, TEST_LOCATION);
557   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(value);
558   DALI_TEST_EQUALS(4245.f, value, FLOAT_EPSILON, TEST_LOCATION);
559
560   DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
561
562   std::string stringValue;
563   actor.GetProperty(CameraActor::PROJECTION_MODE).Get(stringValue);
564   DALI_TEST_EQUALS(stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION);
565   END_TEST;
566 }
567
568 int UtcDaliCameraActorSetOrthographicProjection01(void)
569 {
570   TestApplication application;
571   tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection01()");
572
573   CameraActor actor = CameraActor::New(Size(1080.0f, 1920.0f));
574   DALI_TEST_CHECK(actor);
575
576   Stage::GetCurrent().Add( actor );
577
578   actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
579   application.SendNotification();
580   application.Render(0);
581   application.Render();
582   application.SendNotification();
583
584   float defaultAspectRatio;
585   float defaultFieldOfView;
586   float defaultNearPlaneDistance;
587   float defaultFarPlaneDistance;
588   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(defaultAspectRatio);
589   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(defaultFieldOfView);
590   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(defaultNearPlaneDistance);
591   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(defaultFarPlaneDistance);
592   Vector3 defaultPos = actor.GetCurrentPosition();
593
594   actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
595
596   application.SendNotification();
597   application.Render(0);
598   application.Render();
599   application.SendNotification();
600
601   float value;
602   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(value);
603   DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
604   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(value);
605   DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
606   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(value);
607   DALI_TEST_EQUALS(defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
608   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(value);
609   DALI_TEST_EQUALS(defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
610
611   actor.GetProperty(CameraActor::LEFT_PLANE_DISTANCE).Get(value);
612   DALI_TEST_EQUALS(-540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
613   actor.GetProperty(CameraActor::RIGHT_PLANE_DISTANCE).Get(value);
614   DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
615   actor.GetProperty(CameraActor::TOP_PLANE_DISTANCE).Get(value);
616   DALI_TEST_EQUALS(960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
617   actor.GetProperty(CameraActor::BOTTOM_PLANE_DISTANCE).Get(value);
618   DALI_TEST_EQUALS(-960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
619
620   Vector3 pos = actor.GetCurrentPosition();
621   DALI_TEST_EQUALS(defaultPos.z, pos.z, 0.001f, TEST_LOCATION);
622
623   DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
624   END_TEST;
625 }
626
627
628 int UtcDaliCameraActorSetOrthographicProjection02(void)
629 {
630   TestApplication application;
631   tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection02()");
632
633   CameraActor actor = CameraActor::New();
634   DALI_TEST_CHECK(actor);
635
636   float defaultAspectRatio;
637   float defaultFieldOfView;
638   float defaultNearPlaneDistance;
639   float defaultFarPlaneDistance;
640   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(defaultAspectRatio);
641   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(defaultFieldOfView);
642   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(defaultNearPlaneDistance);
643   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(defaultFarPlaneDistance);
644
645   actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
646
647   float value;
648   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(value);
649   DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
650   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(value);
651   DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
652   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(value);
653   DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
654   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(value);
655   DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
656
657   actor.GetProperty(CameraActor::LEFT_PLANE_DISTANCE).Get(value);
658   DALI_TEST_EQUALS(-100.0f, value, FLOAT_EPSILON, TEST_LOCATION);
659   actor.GetProperty(CameraActor::RIGHT_PLANE_DISTANCE).Get(value);
660   DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION);
661   actor.GetProperty(CameraActor::TOP_PLANE_DISTANCE).Get(value);
662   DALI_TEST_EQUALS(-300.0f, value, FLOAT_EPSILON, TEST_LOCATION);
663   actor.GetProperty(CameraActor::BOTTOM_PLANE_DISTANCE).Get(value);
664   DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION);
665
666   DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
667
668   END_TEST;
669 }
670
671
672 int UtcDaliCameraActorSetOrthographicProjection03(void)
673 {
674   TestApplication application;
675   tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection03()");
676
677   CameraActor actor = CameraActor::New();
678   DALI_TEST_CHECK(actor);
679
680   float defaultAspectRatio;
681   float defaultFieldOfView;
682   float defaultNearPlaneDistance;
683   float defaultFarPlaneDistance;
684   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(defaultAspectRatio);
685   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(defaultFieldOfView);
686   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(defaultNearPlaneDistance);
687   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(defaultFarPlaneDistance);
688
689   actor.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
690
691   actor.SetProperty(CameraActor::LEFT_PLANE_DISTANCE, -100.0f);
692   actor.SetProperty(CameraActor::RIGHT_PLANE_DISTANCE, 200.0f);
693   actor.SetProperty(CameraActor::TOP_PLANE_DISTANCE, -300.0f);
694   actor.SetProperty(CameraActor::BOTTOM_PLANE_DISTANCE, 500.0f);
695   actor.SetNearClippingPlane( 400.0f );
696   actor.SetFarClippingPlane( 4000.0f );
697
698   float value;
699   actor.GetProperty(CameraActor::ASPECT_RATIO).Get(value);
700   DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
701   actor.GetProperty(CameraActor::FIELD_OF_VIEW).Get(value);
702   DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
703   actor.GetProperty(CameraActor::NEAR_PLANE_DISTANCE).Get(value);
704   DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
705   actor.GetProperty(CameraActor::FAR_PLANE_DISTANCE).Get(value);
706   DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
707
708   actor.GetProperty(CameraActor::LEFT_PLANE_DISTANCE).Get(value);
709   DALI_TEST_EQUALS(-100.0f, value, FLOAT_EPSILON, TEST_LOCATION);
710   actor.GetProperty(CameraActor::RIGHT_PLANE_DISTANCE).Get(value);
711   DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION);
712   actor.GetProperty(CameraActor::TOP_PLANE_DISTANCE).Get(value);
713   DALI_TEST_EQUALS(-300.0f, value, FLOAT_EPSILON, TEST_LOCATION);
714   actor.GetProperty(CameraActor::BOTTOM_PLANE_DISTANCE).Get(value);
715   DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION);
716
717   DALI_TEST_EQUALS((int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
718   std::string stringValue;
719   actor.GetProperty(CameraActor::PROJECTION_MODE).Get(stringValue);
720   DALI_TEST_EQUALS(stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION);
721   END_TEST;
722 }
723
724
725
726 int UtcDaliCameraActorReadProjectionMatrix(void)
727 {
728   TestApplication application;
729   tet_infoline("Testing Dali::CameraActor::ReadProjectionMatrix()");
730
731   CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask(0u).GetCameraActor();
732   application.SendNotification();
733   application.Render(0);
734   application.Render();
735   application.SendNotification();
736   Image image = CreateBitmapImage();
737   ImageActor imageActor = ImageActor::New( image );
738   imageActor.SetSize(100.0f, 100.0f);
739   Stage::GetCurrent().Add(imageActor);
740
741   Matrix projectionMatrix;
742   Matrix viewMatrix;
743
744   camera.GetProperty(CameraActor::CameraActor::PROJECTION_MATRIX).Get(projectionMatrix);
745   camera.GetProperty(CameraActor::CameraActor::VIEW_MATRIX).Get(viewMatrix);
746
747   ShaderEffect shaderEffect = ShaderEffect::New( RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE);
748   imageActor.SetShaderEffect(shaderEffect);
749
750   shaderEffect.SetUniform( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
751   shaderEffect.SetUniform( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
752
753   Property::Index projectionMatrixPropertyIndex = shaderEffect.GetPropertyIndex(SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME);
754   Property::Index viewMatrixPropertyIndex = shaderEffect.GetPropertyIndex(SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME);
755
756   Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( projectionMatrixPropertyIndex, Source( camera, CameraActor::PROJECTION_MATRIX ), EqualToConstraint());
757   Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( viewMatrixPropertyIndex, Source( camera, CameraActor::VIEW_MATRIX ), EqualToConstraint());
758
759   shaderEffect.ApplyConstraint(projectionMatrixConstraint);
760   shaderEffect.ApplyConstraint(viewMatrixConstraint);
761
762   application.SendNotification();
763   application.Render();
764
765   // Test effects of Constraint.
766   DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue(SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix));
767
768   DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue(SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix));
769   END_TEST;
770 }
771
772 int UtcDaliCameraActorAnimatedProperties(void)
773 {
774   TestApplication application;
775   tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
776
777   CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask(0u).GetCameraActor();
778   Actor actor = Actor::New();
779   actor.SetSize(100.0f, 100.0f);
780   Stage::GetCurrent().Add(actor);
781
782   actor.ApplyConstraint(Constraint::New<Dali::Vector3>( Actor::POSITION, Source( camera, Actor::POSITION), EqualToConstraint()));
783
784   camera.SetPosition(100.0f, 200.0f, 300.0f);
785   application.SendNotification();
786   application.Render();
787
788   DALI_TEST_EQUALS( actor.GetCurrentPosition(), Vector3(100.0f, 200.0f, 300.0f), TEST_LOCATION);
789   END_TEST;
790 }
791
792 int UtcDaliCameraActorPropertyIndices(void)
793 {
794   TestApplication application;
795   CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask(0u).GetCameraActor();
796
797   Actor basicActor = Actor::New();
798   Property::IndexContainer indices;
799   camera.GetPropertyIndices( indices );
800   DALI_TEST_CHECK( indices.size() > basicActor.GetPropertyCount() );
801   DALI_TEST_EQUALS( indices.size(), camera.GetPropertyCount(), TEST_LOCATION );
802   END_TEST;
803 }
804
805 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
806 {
807   TestApplication application;
808   Stage stage = Stage::GetCurrent();
809   Vector2 stageSize = stage.GetSize();
810
811   CameraActor freeLookCameraActor = CameraActor::New(stageSize);
812   freeLookCameraActor.SetParentOrigin(ParentOrigin::CENTER);
813   freeLookCameraActor.SetType(Camera::FREE_LOOK);
814
815   Vector3 targetPosition(30.0f, 240.0f, -256.0f);
816   Actor target = Actor::New();
817   target.SetParentOrigin(ParentOrigin::CENTER);
818   target.SetPosition(targetPosition);
819
820   Constraint cameraOrientationConstraint =
821     Constraint::New<Quaternion> ( Actor::ROTATION,
822                                   Source( target, Actor::WORLD_POSITION ),
823                                   Source( freeLookCameraActor,  Actor::WORLD_POSITION ),
824                                   Source( target, Actor::WORLD_ROTATION ),
825                                   &LookAt );
826   freeLookCameraActor.ApplyConstraint( cameraOrientationConstraint );
827
828   CameraActor lookAtCameraActor = CameraActor::New(stageSize);
829   lookAtCameraActor.SetType(Camera::LOOK_AT_TARGET);
830   lookAtCameraActor.SetTargetPosition(targetPosition);
831   lookAtCameraActor.SetParentOrigin(ParentOrigin::CENTER);
832
833   stage.Add(target);
834   stage.Add(freeLookCameraActor);
835   stage.Add(lookAtCameraActor);
836
837   // Create an arbitrary vector
838   for( float x=-1.0f; x<=1.0f; x+=0.1f )
839   {
840     for( float y=-1.0f; y<1.0f; y+=0.1f )
841     {
842       for( float z=-1.0f; z<1.0f; z+=0.1f )
843       {
844         Vector3 position(x, y, z);
845         position.Normalize();
846         position *= 200.0f;
847
848         freeLookCameraActor.SetPosition(position);
849         lookAtCameraActor.SetPosition(position);
850
851         application.SendNotification();
852         application.Render();
853         application.SendNotification();
854         application.Render();
855         Matrix freeLookViewMatrix;
856         Matrix lookAtViewMatrix;
857         freeLookCameraActor.GetProperty(CameraActor::CameraActor::VIEW_MATRIX).Get(freeLookViewMatrix);
858         lookAtCameraActor.GetProperty(CameraActor::CameraActor::VIEW_MATRIX).Get(lookAtViewMatrix);
859
860         DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
861       }
862     }
863   }
864   END_TEST;
865 }
866
867 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
868 {
869   TestApplication application;
870   Stage stage = Stage::GetCurrent();
871   Vector2 stageSize = stage.GetSize();
872
873   CameraActor freeLookCameraActor = CameraActor::New(stageSize);
874   freeLookCameraActor.SetParentOrigin(ParentOrigin::CENTER);
875   freeLookCameraActor.SetType(Camera::FREE_LOOK);
876
877   Vector3 targetPosition(30.0f, 240.0f, -256.0f);
878   Actor target = Actor::New();
879   target.SetParentOrigin(ParentOrigin::CENTER);
880   target.SetPosition(targetPosition);
881
882   Constraint cameraOrientationConstraint =
883     Constraint::New<Quaternion> ( Actor::ROTATION,
884                                   Source( target, Actor::WORLD_POSITION ),
885                                   Source( freeLookCameraActor,  Actor::WORLD_POSITION ),
886                                   Source( target, Actor::WORLD_ROTATION ),
887                                   &LookAt );
888   freeLookCameraActor.ApplyConstraint( cameraOrientationConstraint );
889
890   CameraActor lookAtCameraActor = CameraActor::New(stageSize);
891   lookAtCameraActor.SetType(Camera::LOOK_AT_TARGET);
892   lookAtCameraActor.SetTargetPosition(targetPosition);
893   lookAtCameraActor.SetParentOrigin(ParentOrigin::CENTER);
894
895   stage.Add(target);
896   stage.Add(freeLookCameraActor);
897   stage.Add(lookAtCameraActor);
898
899   // Create an arbitrary vector
900   for( float x=-1.0f; x<=1.0f; x+=0.1f )
901   {
902     for( float y=-1.0f; y<1.0f; y+=0.1f )
903     {
904       for( float z=-1.0f; z<1.0f; z+=0.1f )
905       {
906         Vector3 position(x, y, z);
907         position.Normalize();
908         position *= 200.0f;
909
910         freeLookCameraActor.SetPosition(position);
911         lookAtCameraActor.SetPosition(position);
912
913         application.SendNotification();
914         application.Render();
915         application.SendNotification();
916         application.Render();
917         Matrix freeLookViewMatrix;
918         Matrix lookAtViewMatrix;
919         freeLookCameraActor.GetProperty(CameraActor::CameraActor::VIEW_MATRIX).Get(freeLookViewMatrix);
920         lookAtCameraActor.GetProperty(CameraActor::CameraActor::VIEW_MATRIX).Get(lookAtViewMatrix);
921
922         Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
923
924         Matrix freeLookTest(false);
925         Matrix::Multiply(freeLookTest, freeLookViewMatrix, freeLookWorld);
926         DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION);
927
928         DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
929       }
930     }
931   }
932   END_TEST;
933 }
934
935 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
936 {
937   TestApplication application;
938   Stage stage = Stage::GetCurrent();
939   Vector2 stageSize = stage.GetSize();
940
941   Vector3 targetPosition(Vector3::ZERO);
942
943   CameraActor lookAtCameraActor = CameraActor::New(stageSize);
944   lookAtCameraActor.SetType(Camera::LOOK_AT_TARGET);
945   lookAtCameraActor.SetTargetPosition(targetPosition);
946   lookAtCameraActor.SetParentOrigin(ParentOrigin::CENTER);
947   stage.Add(lookAtCameraActor);
948
949   Vector3 cameraOffset( 0.f, 0.f, 100.f );
950
951   CameraActor freeLookCameraActor = CameraActor::New(stageSize);
952   freeLookCameraActor.SetType(Camera::FREE_LOOK);
953   freeLookCameraActor.SetParentOrigin(ParentOrigin::CENTER);
954
955   Quaternion cameraOrientation( Radian(Degree(180.f)), Vector3::YAXIS );
956   freeLookCameraActor.SetPosition(cameraOffset);
957   freeLookCameraActor.SetRotation(cameraOrientation);
958
959   Actor cameraAnchor = Actor::New();
960   cameraAnchor.Add(lookAtCameraActor);
961   stage.Add(cameraAnchor);
962
963
964   for( float angle = 1.f; angle <= 180.f; angle += 1.f )
965   {
966     Quaternion rotation(Radian(Degree(angle)), Vector3::YAXIS);
967
968     lookAtCameraActor.SetPosition( rotation.Rotate( cameraOffset ) );
969     cameraAnchor.SetRotation( rotation );
970
971     application.SendNotification();
972     application.Render();
973     application.SendNotification();
974     application.Render();
975
976     Matrix freeLookViewMatrix;
977     freeLookCameraActor.GetProperty(CameraActor::CameraActor::VIEW_MATRIX).Get(freeLookViewMatrix);
978
979     Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
980
981     Matrix freeLookTest(false);
982     Matrix::Multiply( freeLookTest,  freeLookViewMatrix,  freeLookWorld);
983     DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION);
984   }
985   END_TEST;
986 }