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