1 #ifndef DALI_TOOLKIT_SCENE3D_VIEW_H
\r
2 #define DALI_TOOLKIT_SCENE3D_VIEW_H
\r
5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
21 // EXTERNAL INCLUDES
\r
22 #include <dali/public-api/actors/camera-actor.h>
\r
24 // INTERNAL INCLUDES
\r
25 #include <dali-toolkit/public-api/controls/control.h>
\r
31 namespace Internal DALI_INTERNAL
\r
34 * Scene3dView implementation class
\r
38 } // namespace DALI_INTERNAL
\r
42 * Scene3dView is a class for containing scene elements loaded from scene format file(e.g., glTF). Scene elements mean scene graph, cameras, and animations.
\r
46 * 1) The Scene3dView is initialized with diffuse and specular cube map for the Image Based Lighting.\n
\r
47 * If the Scene3dView initialized without cube map, the objects of the Scene3dView cannot be rendered with IBL.\n
\r
48 * 2) The Scene3dView is loaded from each scene format file(e.g., glTF).\n
\r
49 * 3) The Scene3dView can have a point light or a directional light.(optional)\n
\r
50 * 4) The Scene3dView playes each actor's animation.\n
\r
57 * void Scene3dViewExample::Create( Application& application )
\r
59 * // Use 'Scene3dView::New( URL_SCENE_FILE )', if you don't want to render with IBL.
\r
60 * Scene3dView scene3dView = Scene3dView::New( URL_SCENE_FILE, URL_DIFFUSE_TEXTURE, URL_SPECULAR_TEXTURE );
\r
62 * Stage::GetCurrent().Add( scene3dView );
\r
63 * scene3dView.PlayAnimations();
\r
65 * scene3dView.SetLight( Scene3dView::LightType::DIRECTIONAL_LIGHT, Vector3( 1.0, 1.0, -1.0 ), Vector3( 0.3, 0.3, 0.3 ) );
\r
70 * @remarks This control makes 3D Layer internally. Therefore, if any 2D UI
\r
71 * control is added as a child of this Scene3dView, the functionality of the 2D UI
\r
72 * may not work well.
\r
75 class DALI_TOOLKIT_API Scene3dView : public Control
\r
80 // Scene doesn't use both of point and directional light
\r
82 // Scene use point light
\r
84 // Scene use directional light
\r
86 // Scene use Image Based Lighting
\r
88 // Scene use Image Based Lighting and point light
\r
89 IMAGE_BASED_LIGHT_AND_POINT_LIGHT,
\r
90 // Scene use Image Based Lighting and directional light
\r
91 IMAGE_BASED_LIGHT_AND_DIRECTIONAL_LIGHT
\r
95 * @brief Create an uninitialized Scene3dView; this can be initialized with Scene3dView::New()
\r
96 * Calling member functions with an uninitialized Dali::Object is not allowed.
\r
101 * @brief Copy constructor. Creates another handle that points to the same real object
\r
103 Scene3dView(const Scene3dView& handle);
\r
106 * @brief Assignment operator. Changes this handle to point to another real object
\r
108 Scene3dView& operator=(const Scene3dView& handle);
\r
111 * @brief Destructor
\r
112 * This is non-virtual since derived Handle types must not contain data or virtual methods.
\r
117 * @brief Downcast an Object handle to Scene3dView. If handle points to a Scene3dView the
\r
118 * downcast produces valid handle. If not the returned handle is left uninitialized.
\r
119 * @param[in] handle Handle to an object
\r
120 * @return handle to a Scene3dView or an uninitialized handle
\r
122 static Scene3dView DownCast(BaseHandle handle);
\r
125 * @brief Create an initialized Scene3dView.
\r
126 * @param[in] filePath File path of scene format file (e.g., glTF).
\r
127 * @return A handle to a newly allocated Dali resource
\r
129 static Scene3dView New(const std::string& filePath);
\r
132 * @brief Create an initialized Scene3dView.
\r
133 * @param[in] filePath File path of scene format file (e.g., glTF).
\r
134 * @param[in] diffuseTexturePath The texture path of diffuse cube map that used to render with Image Based Lighting.
\r
135 * @param[in] specularTexturePath The texture path of specular cube map that used to render with Image Based Lighting.
\r
136 * @param[in] scaleFactor Scaling factor for the Image Based Lighting.
\r
137 * @return A handle to a newly allocated Dali resource
\r
139 static Scene3dView New(const std::string& filePath, const std::string& diffuseTexturePath, const std::string& specularTexturePath, Vector4 scaleFactor);
\r
142 * @brief Get animation count.
\r
143 * @return number of animations.
\r
145 uint32_t GetAnimationCount();
\r
148 * @brief Play an animation.
\r
149 * @param[in] index Animation index
\r
150 * @return true if animation is played.
\r
152 bool PlayAnimation(uint32_t index);
\r
155 * @brief Play all animations.
\r
156 * @return true if animations are played.
\r
158 bool PlayAnimations();
\r
161 * @brief Set point light or directional light. If SetLight is not called, this scene doesn't use these kind of light.
\r
162 * @param[in] type The light type. If the light is point light set this LightType::POINT_LIGHT,
\r
163 * or if the light is directional light set this LightType::DIRECTIONAL_LIGHT.
\r
164 * @param[in] lightVector The point light position when light type is LightType::POINT_LIGHT.
\r
165 * The light direction when light type is LightType::DIRECTIONAL_LIGHT.
\r
166 * @param[in] lightColor Vector3 value that denotes the light color of point light or directional light. Since this is the light color, we don't need to use alpha value.
\r
167 * @return true if point light or directional light is set.
\r
169 bool SetLight(LightType type, Vector3 lightVector, Vector3 lightColor);
\r
172 * @brief Get default CameraActor. Dali::Camera::Type = Dali::Camera::LOOK_AT_TARGET , near clipping plane = 0.1, and camera position = Vector3( 0.0, 0.0, 0.0 ).
\r
173 * @return CameraActor.
\r
175 CameraActor GetDefaultCamera();
\r
178 * @brief Get camera count.
\r
179 * @return number of cameras.
\r
181 uint32_t GetCameraCount();
\r
184 * @brief Get CameraActor. If there is no CameraActor in the list, then returns default CameraActor.
\r
185 * @param[in] cameraIndex Index of CameraActor list.
\r
186 * @return CameraActor.
\r
188 CameraActor GetCamera(uint32_t cameraIndex);
\r
190 // Not intended for developer use
\r
193 * @brief Creates a handle using the Toolkit::Internal implementation.
\r
194 * @param[in] implementation The UI Control implementation.
\r
196 DALI_INTERNAL Scene3dView(Toolkit::Internal::Scene3dView& implementation);
\r
198 explicit DALI_INTERNAL Scene3dView(Dali::Internal::CustomActor* internal);
\r
201 } // namespace Toolkit
\r
203 } // namespace Dali
\r
205 #endif // DALI_TOOLKIT_SCENE3D_VIEW_H
\r