-#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.
*/
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
* (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,
class DALI_CORE_API CameraActor : public Actor
{
public:
-
/**
* @brief Enumeration for the instance of properties belonging to the CameraActor class.
*
/**
* @brief Creates a CameraActor object.
*
- * @note No default camera perspective projection is set by this method. @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
* @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.
* @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.
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) noexcept;
+
+ /**
+ * @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) noexcept;
+
+ /**
* @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.
* @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.
/**
* @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.
* @SINCE_1_0.0
* @return The field of view in radians
*/
- float GetFieldOfView( );
+ float GetFieldOfView();
/**
* @brief Sets the aspect ratio.
* @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.
* @SINCE_1_0.0
* @return The aspect ratio
*/
- float GetAspectRatio( );
+ float GetAspectRatio();
/**
* @brief Sets the near clipping plane distance.
* @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.
* @SINCE_1_0.0
* @return The near clipping plane value
*/
- float GetNearClippingPlane( );
+ float GetNearClippingPlane();
/**
* @brief Sets the far clipping plane distance.
* @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.
* @SINCE_1_0.0
* @return The far clipping plane value
*/
- float GetFarClippingPlane( );
+ float GetFarClippingPlane();
/**
* @brief Sets the target position of the camera.
* @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.
* 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.
+ * Also, It will set orthographic size be fitted as XY plane.
*
* @SINCE_1_0.0
* @param[in] size The canvas size
* @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.
* @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
*/
} // namespace Dali
-#endif // __DALI_CAMERA_ACTOR_H__
+#endif // DALI_CAMERA_ACTOR_H