mRenderTask.SetSourceActor(mRootLayer);
mRenderTask.SetExclusive(true);
mRenderTask.SetInputEnabled(true);
+ mRenderTask.SetCullMode(false);
mRenderTask.SetScreenToFrameBufferMappingActor(Self());
mDefaultCamera = Dali::CameraActor::New();
}
Vector3 size = Self().GetProperty<Vector3>(Dali::Actor::Property::SIZE);
- float fov = 0.0f;
- Vector3 cameraPosition(Vector3::ZERO);
- float nearPlain = 1.0f;
- float farPlain = 1.0f;
-
- // Several properties such as fov, nearPlane, farPlane, and position should not be changed after SetPerspectiveProjection is called.
- // In the 3D scene, the properties are not changed by the changes of canvas size.
- fov = mSelectedCamera[Dali::CameraActor::Property::FIELD_OF_VIEW];
- nearPlain = mSelectedCamera[Dali::CameraActor::Property::NEAR_PLANE_DISTANCE];
- farPlain = mSelectedCamera[Dali::CameraActor::Property::FAR_PLANE_DISTANCE];
- cameraPosition = Vector3(mSelectedCamera[Dali::Actor::Property::POSITION]);
-
- mSelectedCamera.SetPerspectiveProjection(Dali::Size(size));
-
- mSelectedCamera[Dali::CameraActor::Property::FIELD_OF_VIEW] = fov;
- mSelectedCamera[Dali::CameraActor::Property::NEAR_PLANE_DISTANCE] = nearPlain;
- mSelectedCamera[Dali::CameraActor::Property::FAR_PLANE_DISTANCE] = farPlain;
- mSelectedCamera[Dali::Actor::Property::POSITION] = cameraPosition;
-
+ const float aspectRatio = size.width / size.height;
+ mSelectedCamera.SetAspectRatio(aspectRatio);
+ const float halfHeight = mSelectedCamera[Dali::CameraActor::Property::TOP_PLANE_DISTANCE];
+ const float halfWidth = aspectRatio * halfHeight;
+ mSelectedCamera[Dali::CameraActor::Property::LEFT_PLANE_DISTANCE] = -halfWidth;
+ mSelectedCamera[Dali::CameraActor::Property::RIGHT_PLANE_DISTANCE] = halfWidth;
+ mSelectedCamera[Dali::CameraActor::Property::TOP_PLANE_DISTANCE] = halfHeight; // Top is +ve to keep consistency with orthographic values
+ mSelectedCamera[Dali::CameraActor::Property::BOTTOM_PLANE_DISTANCE] = -halfHeight; // Bottom is -ve to keep consistency with orthographic values
if(mUseFrameBuffer)
{
Dali::FrameBuffer currentFrameBuffer = mRenderTask.GetFrameBuffer();
* Users can place multiple cameras in a scene, either to show the entire scene or to show individual objects.
* And the user can select the currently needed camera by using the SelectCamera() method.
*
- * SceneView has one CameraActor built-in by default at the (0, 0, -z).
+ * SceneView makes one built-in CameraActor by default.
* The default CameraActor has index 0 and is not removed by using RemoveCamera() method.
* Therefore, the minimum value returned by GetCameraCount() method is 1.
*
* sceneView.Add(model);
*
* CameraActor cameraActor = CameraActor::New();
- * // Setting CameraActor.
* sceneView.AddCamera(cameraActor);
*
* @endcode
* @brief Adds a CameraActor to the SceneView
* The CameraActor can be used as a selected camera to render the scene by using SelectCamera(uint32_t) or SelectCamera(std::string)
*
- * @note Some properties of the CameraActor will be change depending on the Size of this SceneView.
- * Those properties are as follows:
- * projectionMode, aspectRatio, nearPlaneDistance, farPlaneDistance, leftPlaneDistance, rightPlaneDistance, topPlaneDistance, and bottomPlaneDistance.
+ * @note
+ * AspectRatio property of CameraActor will be changed depending on the Size of this SceneView.
*
+ * For Perspective camera
* The FieldOfView of Dali::CameraActor is for vertical fov.
* When the size of the SceneView is changed, the vertical fov is maintained
* and the horizontal fov is automatically calculated according to the SceneView's aspect ratio.
*
+ * For Orthographic camera
+ * leftPlaneDistance, rightPlaneDistance, and bottomPlaneDistance properties are defined according to the topPlaneDistance and aspectRatio.
+ *
* @param[in] camera CameraActor added on this scene view.
*/
void AddCamera(Dali::CameraActor camera);