ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Scene.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <Eigen.h>
11 
12 #include <Eigen/Geometry>
13 #include <memory>
14 #include <vector>
15 
18 
19 class ccBBox;
20 class ccHObject;
21 namespace cloudViewer {
22 namespace geometry {
23 class Image;
24 } // namespace geometry
25 
26 namespace t {
27 namespace geometry {
28 class Geometry;
29 class PointCloud;
30 } // namespace geometry
31 } // namespace t
32 
33 namespace visualization {
34 namespace rendering {
35 
36 class Renderer;
37 class View;
38 struct TriangleMeshModel;
39 struct MaterialRecord;
40 struct Light;
41 
42 // Contains renderable objects like geometry and lights
43 // Can have multiple views
44 class Scene {
45 public:
46  static const uint32_t kUpdatePointsFlag = (1 << 0);
47  static const uint32_t kUpdateNormalsFlag = (1 << 1);
48  static const uint32_t kUpdateColorsFlag = (1 << 2);
49  static const uint32_t kUpdateUv0Flag = (1 << 3);
50 
51 #ifdef SIMD_ENABLED
52  using Transform =
53  Eigen::Transform<float, 3, Eigen::Affine, Eigen::DontAlign>;
54 #else
55  using Transform = Eigen::Transform<float, 3, Eigen::Affine>;
56 #endif
57 
58  Scene(Renderer& renderer) : renderer_(renderer) {}
59  virtual ~Scene() = default;
60 
61  virtual Scene* Copy() = 0;
62 
63  // NOTE: Temporarily need to support old View interface for ImGUI
64  virtual ViewHandle AddView(std::int32_t x,
65  std::int32_t y,
66  std::uint32_t w,
67  std::uint32_t h) = 0;
68 
69  virtual View* GetView(const ViewHandle& view_id) const = 0;
70  virtual void SetViewActive(const ViewHandle& view_id, bool is_active) = 0;
71  virtual void SetRenderOnce(const ViewHandle& view_id) = 0;
72  virtual void RemoveView(const ViewHandle& view_id) = 0;
73 
74  // Camera
75  virtual void AddCamera(const std::string& camera_name,
76  std::shared_ptr<Camera> cam) = 0;
77  virtual void RemoveCamera(const std::string& camera_name) = 0;
78  virtual void SetActiveCamera(const std::string& camera_name) = 0;
79 
80  // Scene geometry
81  virtual bool AddGeometry(const std::string& object_name,
82  const ccHObject& geometry,
83  const MaterialRecord& material,
84  const std::string& downsampled_name = "",
85  size_t downsample_threshold = SIZE_MAX) = 0;
86  virtual bool AddGeometry(const std::string& object_name,
87  const t::geometry::Geometry& geometry,
88  const MaterialRecord& material,
89  const std::string& downsampled_name = "",
90  size_t downsample_threshold = SIZE_MAX) = 0;
91  virtual bool AddGeometry(const std::string& object_name,
92  const TriangleMeshModel& model) = 0;
93  virtual bool HasGeometry(const std::string& object_name) const = 0;
94  virtual void UpdateGeometry(const std::string& object_name,
95  const t::geometry::PointCloud& point_cloud,
96  uint32_t update_flags) = 0;
97  virtual void RemoveGeometry(const std::string& object_name) = 0;
98  virtual void ShowGeometry(const std::string& object_name, bool show) = 0;
99  virtual bool GeometryIsVisible(const std::string& object_name) = 0;
100  virtual void OverrideMaterial(const std::string& object_name,
101  const MaterialRecord& material) = 0;
102  virtual void GeometryShadows(const std::string& object_name,
103  bool cast_shadows,
104  bool receive_shadows) = 0;
105  virtual void SetGeometryCulling(const std::string& object_name,
106  bool enable) = 0;
107  virtual void SetGeometryPriority(const std::string& object_name,
108  uint8_t priority) = 0;
109  virtual void QueryGeometry(std::vector<std::string>& geometry) = 0;
110  virtual void SetGeometryTransform(const std::string& object_name,
111  const Transform& transform) = 0;
112  virtual Transform GetGeometryTransform(const std::string& object_name) = 0;
113  virtual ccBBox GetGeometryBoundingBox(const std::string& object_name) = 0;
114  virtual void OverrideMaterialAll(const MaterialRecord& material,
115  bool shader_only = true) = 0;
116 
117  // Lighting Environment
118  virtual bool AddPointLight(const std::string& light_name,
119  const Eigen::Vector3f& color,
120  const Eigen::Vector3f& position,
121  float intensity,
122  float falloff,
123  bool cast_shadows) = 0;
124  virtual bool AddSpotLight(const std::string& light_name,
125  const Eigen::Vector3f& color,
126  const Eigen::Vector3f& position,
127  const Eigen::Vector3f& direction,
128  float intensity,
129  float falloff,
130  float inner_cone_angle,
131  float outer_cone_angle,
132  bool cast_shadows) = 0;
133  virtual bool AddDirectionalLight(const std::string& light_name,
134  const Eigen::Vector3f& color,
135  const Eigen::Vector3f& direction,
136  float intensity,
137  bool cast_shadows) = 0;
138  virtual Light& GetLight(const std::string& light_name) = 0;
139  virtual void RemoveLight(const std::string& light_name) = 0;
140  virtual void UpdateLight(const std::string& light_name,
141  const Light& light) = 0;
142  virtual void UpdateLightColor(const std::string& light_name,
143  const Eigen::Vector3f& color) = 0;
144  virtual void UpdateLightPosition(const std::string& light_name,
145  const Eigen::Vector3f& position) = 0;
146  virtual void UpdateLightDirection(const std::string& light_name,
147  const Eigen::Vector3f& direction) = 0;
148  virtual void UpdateLightIntensity(const std::string& light_name,
149  float intensity) = 0;
150  virtual void UpdateLightFalloff(const std::string& light_name,
151  float falloff) = 0;
152  virtual void UpdateLightConeAngles(const std::string& light_name,
153  float inner_cone_angle,
154  float outer_cone_angle) = 0;
155  virtual void EnableLightShadow(const std::string& light_name,
156  bool cast_shadows) = 0;
157 
158  virtual void SetSunLight(const Eigen::Vector3f& direction,
159  const Eigen::Vector3f& color,
160  float intensity) = 0;
161  virtual void EnableSunLight(bool enable) = 0;
162  virtual void EnableSunLightShadows(bool enable) = 0;
163  virtual void SetSunLightColor(const Eigen::Vector3f& color) = 0;
164  virtual Eigen::Vector3f GetSunLightColor() = 0;
165  virtual void SetSunLightIntensity(float intensity) = 0;
166  virtual float GetSunLightIntensity() = 0;
167  virtual void SetSunLightDirection(const Eigen::Vector3f& direction) = 0;
168  virtual Eigen::Vector3f GetSunLightDirection() = 0;
169  virtual void SetSunAngularRadius(float radius) = 0;
170  virtual void SetSunHaloSize(float size) = 0;
171  virtual void SetSunHaloFalloff(float falloff) = 0;
172 
173  virtual bool SetIndirectLight(const std::string& ibl_name) = 0;
174  virtual const std::string& GetIndirectLight() = 0;
175  virtual void EnableIndirectLight(bool enable) = 0;
176  virtual void SetIndirectLightIntensity(float intensity) = 0;
177  virtual float GetIndirectLightIntensity() = 0;
178  virtual void SetIndirectLightRotation(const Transform& rotation) = 0;
180  virtual void ShowSkybox(bool show) = 0;
181  virtual bool GetSkyboxVisible() const = 0;
182  virtual void SetBackground(
183  const Eigen::Vector4f& color,
184  const std::shared_ptr<geometry::Image> image = nullptr) = 0;
185  virtual void SetBackground(TextureHandle image) = 0;
186 
187  enum class GroundPlane { XZ, XY, YZ };
188  virtual void EnableGroundPlane(bool enable, GroundPlane plane) = 0;
189  virtual void SetGroundPlaneColor(const Eigen::Vector4f& color) = 0;
190 
192  virtual void RenderToImage(
193  std::function<void(std::shared_ptr<geometry::Image>)> callback) = 0;
194 
196  virtual void RenderToDepthImage(
197  std::function<void(std::shared_ptr<geometry::Image>)> callback) = 0;
198 
199 protected:
201 };
202 
203 } // namespace rendering
204 } // namespace visualization
205 } // namespace cloudViewer
std::shared_ptr< core::Tensor > image
std::function< void(std::shared_ptr< core::Tensor >)> callback
int size
math::float4 color
math::float3 position
Bounding box structure.
Definition: ecvBBox.h:25
Hierarchical CLOUDVIEWER Object.
Definition: ecvHObject.h:25
The base geometry class.
Definition: Geometry.h:23
A point cloud contains a list of 3D points.
Definition: PointCloud.h:82
virtual void SetGeometryPriority(const std::string &object_name, uint8_t priority)=0
virtual void QueryGeometry(std::vector< std::string > &geometry)=0
virtual ViewHandle AddView(std::int32_t x, std::int32_t y, std::uint32_t w, std::uint32_t h)=0
virtual void RenderToDepthImage(std::function< void(std::shared_ptr< geometry::Image >)> callback)=0
Size of image is the size of the window.
virtual ccBBox GetGeometryBoundingBox(const std::string &object_name)=0
virtual void EnableSunLightShadows(bool enable)=0
virtual void SetSunHaloFalloff(float falloff)=0
virtual Eigen::Vector3f GetSunLightColor()=0
virtual void UpdateLightIntensity(const std::string &light_name, float intensity)=0
virtual bool AddPointLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &position, float intensity, float falloff, bool cast_shadows)=0
virtual bool AddDirectionalLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &direction, float intensity, bool cast_shadows)=0
virtual void UpdateLightFalloff(const std::string &light_name, float falloff)=0
Eigen::Transform< float, 3, Eigen::Affine > Transform
Definition: Scene.h:55
virtual bool GeometryIsVisible(const std::string &object_name)=0
virtual void UpdateLightDirection(const std::string &light_name, const Eigen::Vector3f &direction)=0
virtual void GeometryShadows(const std::string &object_name, bool cast_shadows, bool receive_shadows)=0
virtual void RemoveCamera(const std::string &camera_name)=0
virtual void SetBackground(TextureHandle image)=0
static const uint32_t kUpdateNormalsFlag
Definition: Scene.h:47
virtual void SetIndirectLightRotation(const Transform &rotation)=0
virtual void SetActiveCamera(const std::string &camera_name)=0
virtual void RemoveGeometry(const std::string &object_name)=0
virtual Light & GetLight(const std::string &light_name)=0
virtual Transform GetGeometryTransform(const std::string &object_name)=0
virtual void SetGeometryTransform(const std::string &object_name, const Transform &transform)=0
virtual void SetSunLightDirection(const Eigen::Vector3f &direction)=0
static const uint32_t kUpdatePointsFlag
Definition: Scene.h:46
virtual void SetSunLightColor(const Eigen::Vector3f &color)=0
virtual void EnableSunLight(bool enable)=0
virtual const std::string & GetIndirectLight()=0
virtual void SetGroundPlaneColor(const Eigen::Vector4f &color)=0
virtual void SetSunAngularRadius(float radius)=0
virtual void RemoveLight(const std::string &light_name)=0
virtual void EnableLightShadow(const std::string &light_name, bool cast_shadows)=0
virtual void OverrideMaterialAll(const MaterialRecord &material, bool shader_only=true)=0
virtual bool AddGeometry(const std::string &object_name, const TriangleMeshModel &model)=0
virtual void UpdateLight(const std::string &light_name, const Light &light)=0
virtual void UpdateGeometry(const std::string &object_name, const t::geometry::PointCloud &point_cloud, uint32_t update_flags)=0
virtual void RemoveView(const ViewHandle &view_id)=0
virtual void SetRenderOnce(const ViewHandle &view_id)=0
virtual bool AddGeometry(const std::string &object_name, const ccHObject &geometry, const MaterialRecord &material, const std::string &downsampled_name="", size_t downsample_threshold=SIZE_MAX)=0
virtual void SetSunLight(const Eigen::Vector3f &direction, const Eigen::Vector3f &color, float intensity)=0
virtual void SetIndirectLightIntensity(float intensity)=0
virtual void SetSunLightIntensity(float intensity)=0
virtual void UpdateLightColor(const std::string &light_name, const Eigen::Vector3f &color)=0
virtual void SetBackground(const Eigen::Vector4f &color, const std::shared_ptr< geometry::Image > image=nullptr)=0
virtual bool SetIndirectLight(const std::string &ibl_name)=0
static const uint32_t kUpdateColorsFlag
Definition: Scene.h:48
virtual void SetGeometryCulling(const std::string &object_name, bool enable)=0
virtual Eigen::Vector3f GetSunLightDirection()=0
virtual void RenderToImage(std::function< void(std::shared_ptr< geometry::Image >)> callback)=0
Size of image is the size of the window.
virtual bool HasGeometry(const std::string &object_name) const =0
virtual void UpdateLightConeAngles(const std::string &light_name, float inner_cone_angle, float outer_cone_angle)=0
virtual void SetSunHaloSize(float size)=0
virtual bool AddGeometry(const std::string &object_name, const t::geometry::Geometry &geometry, const MaterialRecord &material, const std::string &downsampled_name="", size_t downsample_threshold=SIZE_MAX)=0
static const uint32_t kUpdateUv0Flag
Definition: Scene.h:49
virtual void UpdateLightPosition(const std::string &light_name, const Eigen::Vector3f &position)=0
virtual View * GetView(const ViewHandle &view_id) const =0
virtual void EnableGroundPlane(bool enable, GroundPlane plane)=0
virtual void SetViewActive(const ViewHandle &view_id, bool is_active)=0
virtual void OverrideMaterial(const std::string &object_name, const MaterialRecord &material)=0
virtual void AddCamera(const std::string &camera_name, std::shared_ptr< Camera > cam)=0
virtual bool AddSpotLight(const std::string &light_name, const Eigen::Vector3f &color, const Eigen::Vector3f &position, const Eigen::Vector3f &direction, float intensity, float falloff, float inner_cone_angle, float outer_cone_angle, bool cast_shadows)=0
virtual void ShowGeometry(const std::string &object_name, bool show)=0
virtual void EnableIndirectLight(bool enable)=0
#define SIZE_MAX
::ccPointCloud PointCloud
Definition: PointCloud.h:19
::ccHObject Geometry
Definition: Geometry.h:18
Generic file read and write utility for python interface.
constexpr Rgbaf light(0.66f, 0.66f, 0.66f, 1.00f)