Make new CameraActor creation API for 3D apps
[platform/core/uifw/dali-core.git] / dali / public-api / actors / camera-actor.h
index 401a0e1..00337f2 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_CAMERA_ACTOR_H__
-#define __DALI_CAMERA_ACTOR_H__
+#ifndef DALI_CAMERA_ACTOR_H
+#define DALI_CAMERA_ACTOR_H
 
 /*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -54,8 +54,8 @@ enum Type
  */
 enum ProjectionMode
 {
-  PERSPECTIVE_PROJECTION,    ///< Distance causes foreshortening; objects further from the camera appear smaller @SINCE_1_0.0
-  ORTHOGRAPHIC_PROJECTION,    ///< Relative distance from the camera does not affect the size of objects @SINCE_1_0.0
+  PERSPECTIVE_PROJECTION,  ///< Distance causes foreshortening; objects further from the camera appear smaller @SINCE_1_0.0
+  ORTHOGRAPHIC_PROJECTION, ///< Relative distance from the camera does not affect the size of objects @SINCE_1_0.0
 };
 
 } // namespace Camera
@@ -72,7 +72,8 @@ enum ProjectionMode
  *   (configured to have the origin of the coordinate system at the top-left corner of the screen, and unit 1 as 1 pixel of the screen).
  *   This is a typical way.
  *
- * - For 3D applications, you can change the view by manipulating the camera. You can translate or rotate the camera in this case.
+ * - For 3D applications, you can change the view by manipulating the camera. If you config some camera properties,
+ *   or create camera by @see New3DCamera(), you can translate or rotate the camera whatever you want.
  *   Note that the top-left corner of the screen and unit 1 no longer are (0,0,0) and 1 pixel after manipulating the camera.
  *
  * There are two types of camera actor, FREE_LOOK and LOOK_AT_TARGET. By default,
@@ -89,7 +90,6 @@ enum ProjectionMode
 class DALI_CORE_API CameraActor : public Actor
 {
 public:
-
   /**
    * @brief Enumeration for the instance of properties belonging to the CameraActor class.
    *
@@ -135,7 +135,10 @@ public:
   /**
    * @brief Creates a CameraActor object.
    *
-   * Sets the default camera perspective projection for the stage's size. @see SetPerspectiveProjection().
+   * @note Sets the default camera perspective projection for the size of the scene this is added to. @see SetPerspectiveProjection().
+   * @note When this actor gets added to a scene, then it's Z position will be modified according to the required perspective projection.
+   * After modified Z position, 1-world-unit become 1-pixel.
+   *
    * @SINCE_1_0.0
    * @return The newly created camera actor
    */
@@ -150,7 +153,18 @@ public:
    * @param[in] size The canvas size
    * @return The newly created camera actor
    */
-  static CameraActor New( const Size& size );
+  static CameraActor New(const Size& size);
+
+  /**
+   * @brief Creates a CameraActor object initialize by 3D parameter.
+   *
+   * Intialize default perspective camera s.t. properties as good to be used on 3D app case.
+   * Default camera positioned at +Z axis, and fit to see 1-world-unit sized cube on world origin.
+   *
+   * @SINCE_2_2.15
+   * @return The newly created camera actor
+   */
+  static CameraActor New3DCamera();
 
   /**
    * @brief Downcasts a handle to CameraActor handle.
@@ -161,7 +175,7 @@ public:
    * @param[in] handle to An object
    * @return Handle to a CameraActor or an uninitialized handle
    */
-  static CameraActor DownCast( BaseHandle handle );
+  static CameraActor DownCast(BaseHandle handle);
 
   /**
    * @brief Destructor.
@@ -189,12 +203,29 @@ public:
   CameraActor& operator=(const CameraActor& rhs);
 
   /**
+   * @brief Move constructor.
+   *
+   * @SINCE_2_2.4
+   * @param[in] rhs A reference to the actor to move
+   */
+  CameraActor(CameraActor&& rhs);
+
+  /**
+   * @brief Move assignment operator.
+   *
+   * @SINCE_2_2.4
+   * @param[in] rhs A reference to the actor to move
+   * @return A reference to this
+   */
+  CameraActor& operator=(CameraActor&& rhs);
+
+  /**
    * @brief Sets the camera type.
    * The default type is Dali::Camera::FREE_LOOK
    * @SINCE_1_0.0
    * @param[in] type The camera type
    */
-  void SetType( Dali::Camera::Type type );
+  void SetType(Dali::Camera::Type type);
 
   /**
    * @brief Gets the type of the camera.
@@ -210,7 +241,7 @@ public:
    * @SINCE_1_0.0
    * @param[in] mode One of PERSPECTIVE_PROJECTION or ORTHOGRAPHIC_PROJECTION
    */
-  void SetProjectionMode( Dali::Camera::ProjectionMode mode );
+  void SetProjectionMode(Dali::Camera::ProjectionMode mode);
 
   /**
    * @brief Gets the projection mode.
@@ -222,11 +253,12 @@ public:
 
   /**
    * @brief Sets the field of view.
+   * Field of view will be used when ProjectionMode is PERSPECTIVE_PROJECTION.
    *
    * @SINCE_1_0.0
    * @param[in] fieldOfView The field of view in radians
    */
-  void SetFieldOfView( float fieldOfView );
+  void SetFieldOfView(float fieldOfView);
 
   /**
    * @brief Gets the field of view in Radians.
@@ -235,7 +267,7 @@ public:
    * @SINCE_1_0.0
    * @return The field of view in radians
    */
-  float GetFieldOfView( );
+  float GetFieldOfView();
 
   /**
    * @brief Sets the aspect ratio.
@@ -243,7 +275,7 @@ public:
    * @SINCE_1_0.0
    * @param[in] aspectRatio The aspect ratio
    */
-  void SetAspectRatio( float aspectRatio );
+  void SetAspectRatio(float aspectRatio);
 
   /**
    * @brief Gets the aspect ratio of the camera.
@@ -252,7 +284,7 @@ public:
    * @SINCE_1_0.0
    * @return The aspect ratio
    */
-  float GetAspectRatio( );
+  float GetAspectRatio();
 
   /**
    * @brief Sets the near clipping plane distance.
@@ -260,7 +292,7 @@ public:
    * @SINCE_1_0.0
    * @param[in] nearClippingPlane Distance of the near clipping plane
    */
-  void SetNearClippingPlane( float nearClippingPlane );
+  void SetNearClippingPlane(float nearClippingPlane);
 
   /**
    * @brief Gets the near clipping plane distance.
@@ -270,7 +302,7 @@ public:
    * @SINCE_1_0.0
    * @return The near clipping plane value
    */
-  float GetNearClippingPlane( );
+  float GetNearClippingPlane();
 
   /**
    * @brief Sets the far clipping plane distance.
@@ -278,7 +310,7 @@ public:
    * @SINCE_1_0.0
    * @param[in] farClippingPlane Distance of the far clipping plane
    */
-  void SetFarClippingPlane( float farClippingPlane );
+  void SetFarClippingPlane(float farClippingPlane);
 
   /**
    * @brief Gets the far clipping plane distance.
@@ -287,7 +319,7 @@ public:
    * @SINCE_1_0.0
    * @return The far clipping plane value
    */
-  float GetFarClippingPlane( );
+  float GetFarClippingPlane();
 
   /**
    * @brief Sets the target position of the camera.
@@ -296,7 +328,7 @@ public:
    * @param[in] targetPosition The position of the target to look at
    * @pre Camera type is LOOK_AT_TARGET.
    */
-  void SetTargetPosition( const Vector3& targetPosition );
+  void SetTargetPosition(const Vector3& targetPosition);
 
   /**
    * @brief Gets the Camera Target position.
@@ -331,16 +363,15 @@ public:
    * Sets the near and far clipping planes, the field of view, the aspect ratio,
    * and the Z position of the actor based on the canvas size so that 1 unit in
    * XY (z=0) plane is 1 pixel on screen.
-   *
-   * If the canvas size is ZERO, it sets the default camera perspective
-   * projection for the stage's size.
+   * Also, It will set orthographic size be fitted as XY plane.
    *
    * @SINCE_1_0.0
    * @param[in] size The canvas size
-   * @pre If size is non ZERO, \e width and \e height must be greater than zero.
-   *
+   * @pre The canvas size must be greater than zero.
+   * @note If either of the values of size is 0.0f, then we use the default perspective projection for the size of the scene this actor is added to.
+   * @note This modifies the Z position property of this actor as well.
    */
-  void SetPerspectiveProjection( const Size& size );
+  void SetPerspectiveProjection(const Size& size);
 
   /**
    * @brief Sets the camera projection to use orthographic projection.
@@ -356,22 +387,7 @@ public:
    * @SINCE_1_0.0
    * @param[in] size Size of XY plane (normal to camera axis)
    */
-  void SetOrthographicProjection( const Size& size );
-
-  /**
-   * @brief Sets the camera projection to use orthographic projection with the given clip planes.
-   *
-   * This does not change the Z value of the camera actor.
-   *
-   * @SINCE_1_0.0
-   * @param[in] left Distance to left clip plane (normal to camera axis)
-   * @param[in] right Distance to right clip plane (normal to camera axis)
-   * @param[in] top Distance to top clip plane (normal to camera axis)
-   * @param[in] bottom Distance to bottom clip plane (normal to camera axis)
-   * @param[in] near Distance to the near clip plane (along camera axis)
-   * @param[in] far Distance to the far clip plane (along camera axis)
-   */
-  void SetOrthographicProjection( float left, float right, float top, float bottom, float near, float far );
+  void SetOrthographicProjection(const Size& size);
 
 public: // Not intended for use by Application developers
   /// @cond internal
@@ -390,4 +406,4 @@ public: // Not intended for use by Application developers
  */
 } // namespace Dali
 
-#endif // __DALI_CAMERA_ACTOR_H__
+#endif // DALI_CAMERA_ACTOR_H