Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
Visualizer.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10// Avoid warning caused by redefinition of APIENTRY macro
11// defined also in glfw3.h
12#ifdef _WIN32
13#include <windows.h>
14#endif
15
16#include <GL/glew.h>
17#include <GLFW/glfw3.h>
18
19#include <Eigen/Core>
20#include <memory>
21#include <string>
22#include <unordered_map>
23#include <unordered_set>
24
30
31namespace open3d {
32
33namespace geometry {
34class TriangleMesh;
35class Image;
36} // namespace geometry
37
38namespace visualization {
39
40class GLFWContext;
41#if defined(__linux__)
42class EGLOffscreenContext;
43#endif
44
49public:
50 struct MouseControl {
51 public:
54 bool is_control_key_down = false;
55 bool is_shift_key_down = false;
56 bool is_alt_key_down = false;
57 bool is_super_key_down = false;
58 double mouse_position_x = 0.0;
59 double mouse_position_y = 0.0;
60 };
61
62public:
63 Visualizer();
64 virtual ~Visualizer();
65 Visualizer(Visualizer &&) = delete;
66 Visualizer(const Visualizer &) = delete;
67 Visualizer &operator=(const Visualizer &) = delete;
68
69public:
80 bool CreateVisualizerWindow(const std::string &window_name = "Open3D",
81 const int width = 640,
82 const int height = 480,
83 const int left = 50,
84 const int top = 50,
85 const bool visible = true);
86
91
98 std::function<bool(Visualizer *)> callback_func);
99
103 void Run();
104
106 void Close();
107
113 bool WaitEvents();
114
120 bool PollEvents();
121
136 virtual bool AddGeometry(
137 std::shared_ptr<const geometry::Geometry> geometry_ptr,
138 bool reset_bounding_box = true);
139
150 virtual bool RemoveGeometry(
151 std::shared_ptr<const geometry::Geometry> geometry_ptr,
152 bool reset_bounding_box = true);
153
157 virtual bool ClearGeometries();
158
165 virtual bool UpdateGeometry(
166 std::shared_ptr<const geometry::Geometry> geometry_ptr = nullptr);
167 virtual bool HasGeometry() const;
168
170 virtual void UpdateRender();
171
173 virtual void SetFullScreen(bool fullscreen);
174 virtual void ToggleFullScreen();
175 virtual bool IsFullScreen();
176
177 virtual void PrintVisualizerHelp();
178 virtual void UpdateWindowTitle();
179 virtual void BuildUtilities();
180
188 std::shared_ptr<geometry::Image> CaptureScreenFloatBuffer(
189 bool do_render = true);
194 void CaptureScreenImage(const std::string &filename = "",
195 bool do_render = true);
199 std::shared_ptr<geometry::Image> CaptureDepthFloatBuffer(
200 bool do_render = true);
206 void CaptureDepthImage(const std::string &filename = "",
207 bool do_render = true,
208 double depth_scale = 1000.0);
215 void CaptureDepthPointCloud(const std::string &filename = "",
216 bool do_render = true,
217 bool convert_to_world_coordinate = false);
218 void CaptureRenderOption(const std::string &filename = "");
219
221 void ResetViewPoint(bool reset_bounding_box = false);
222
223 const std::string &GetWindowName() const { return window_name_; }
224
226 std::string GetViewStatus();
227
229 void SetViewStatus(const std::string &view_status_str);
230
231protected:
238 void MakeContextCurrent();
239
243 bool ShouldRemainOpen() const;
244
247 void RequestClose();
248
250 virtual bool InitOpenGL();
251
253 virtual bool InitViewControl();
254
256 virtual bool InitRenderOption();
257
261 virtual void Render(bool render_screen = false);
262
265
268
270 virtual void WindowRefreshCallback(GLFWwindow *window);
271 virtual void WindowResizeCallback(GLFWwindow *window, int w, int h);
272 virtual void MouseMoveCallback(GLFWwindow *window, double x, double y);
273 virtual void MouseScrollCallback(GLFWwindow *window, double x, double y);
274 virtual void MouseButtonCallback(GLFWwindow *window,
275 int button,
276 int action,
277 int mods);
278 virtual void KeyPressCallback(
279 GLFWwindow *window, int key, int scancode, int action, int mods);
281 virtual void WindowCloseCallback(GLFWwindow *window);
282
283protected:
284 // window
285 GLFWwindow *window_ = NULL;
286 std::string window_name_ = "Open3D";
287
289 std::shared_ptr<GLFWContext> glfw_context_ = nullptr;
290
293 bool headless_ = false;
296 bool should_close_ = false;
297#if defined(__linux__)
300 std::unique_ptr<EGLOffscreenContext> egl_context_;
301#endif
302
303 Eigen::Vector2i saved_window_size_ = Eigen::Vector2i::Zero();
304 Eigen::Vector2i saved_window_pos_ = Eigen::Vector2i::Zero();
305 std::function<bool(Visualizer *)> animation_callback_func_ = nullptr;
306 // Auxiliary internal backup of the callback function.
307 // It copies animation_callback_func_ in each PollEvent() or WaitEvent()
308 // so that even if user calls RegisterAnimationCallback() within the
309 // callback function it is still safe.
311 nullptr;
312
313 // control
316 bool is_initialized_ = false;
317 GLuint vao_id_ = 0;
318
319 // render targets for "capture_screen_float_buffer" and
320 // "capture_screen_image" in offscreen render mode
321 GLuint render_fbo_ = 0;
322 GLuint render_rgb_tex_ = 0;
324
325 // view control
326 std::unique_ptr<ViewControl> view_control_ptr_;
327
328 // rendering properties
329 std::unique_ptr<RenderOption> render_option_ptr_;
330
331 // geometry to be rendered
332 std::unordered_set<std::shared_ptr<const geometry::Geometry>>
334
335 // geometry renderers
336 std::unordered_set<std::shared_ptr<glsl::GeometryRenderer>>
338
339 // utilities owned by the Visualizer
340 std::vector<std::shared_ptr<const geometry::Geometry>> utility_ptrs_;
341
342 // utility renderers
343 std::vector<std::shared_ptr<glsl::GeometryRenderer>> utility_renderer_ptrs_;
344 // map's key is the renderer for which the RenderOption applies
345 // (should be something in utility_renderer_ptrs_)
346 std::unordered_map<std::shared_ptr<glsl::GeometryRenderer>, RenderOption>
348
349 // coordinate frame
350 std::shared_ptr<geometry::TriangleMesh> coordinate_frame_mesh_ptr_;
351 std::shared_ptr<glsl::CoordinateFrameRenderer>
353
354#ifdef __APPLE__
355 // MacBook with Retina display does not have a 1:1 mapping from screen
356 // coordinates to pixels. Thus we hack it back.
357 // http://www.glfw.org/faq.html#why-is-my-output-in-the-lower-left-corner-of-the-window
358 double pixel_to_screen_coordinate_ = 1.0;
359#endif //__APPLE__
360};
361
362} // namespace visualization
363} // namespace open3d
Defines rendering options for visualizer.
Definition RenderOption.h:20
View controller for visualizer.
Definition ViewControl.h:23
The main Visualizer class.
Definition Visualizer.h:48
void CaptureRenderOption(const std::string &filename="")
Definition VisualizerRender.cpp:532
bool CreateVisualizerWindow(const std::string &window_name="Open3D", const int width=640, const int height=480, const int left=50, const int top=50, const bool visible=true)
Function to create a window and initialize GLFW.
Definition Visualizer.cpp:97
virtual void BuildUtilities()
Definition Visualizer.cpp:338
std::unique_ptr< RenderOption > render_option_ptr_
Definition Visualizer.h:329
virtual void SetFullScreen(bool fullscreen)
Functions to change between fullscreen and windowed modes.
Definition Visualizer.cpp:558
virtual bool ClearGeometries()
Definition Visualizer.cpp:530
bool is_initialized_
Definition Visualizer.h:316
std::unique_ptr< ViewControl > view_control_ptr_
Definition Visualizer.h:326
GLuint vao_id_
Definition Visualizer.h:317
GLuint render_fbo_
Definition Visualizer.h:321
bool PollEvents()
Definition Visualizer.cpp:396
std::shared_ptr< GLFWContext > glfw_context_
Shared GLFW context.
Definition Visualizer.h:289
void CaptureDepthImage(const std::string &filename="", bool do_render=true, double depth_scale=1000.0)
Definition VisualizerRender.cpp:367
GLuint render_depth_stencil_rbo_
Definition Visualizer.h:323
std::vector< std::shared_ptr< const geometry::Geometry > > utility_ptrs_
Definition Visualizer.h:340
virtual void UpdateRender()
Function to inform render needed to be updated.
Definition Visualizer.cpp:554
std::function< bool(Visualizer *)> animation_callback_func_in_loop_
Definition Visualizer.h:310
Eigen::Vector2i saved_window_pos_
Definition Visualizer.h:304
void MakeContextCurrent()
Make the visualizer's OpenGL context (GLFW window, or offscreen EGL context in headless mode) current...
Definition Visualizer.cpp:292
void CaptureDepthPointCloud(const std::string &filename="", bool do_render=true, bool convert_to_world_coordinate=false)
Function to capture and save local point cloud.
Definition VisualizerRender.cpp:450
virtual bool InitOpenGL()
Function to initialize OpenGL.
Definition VisualizerRender.cpp:33
virtual bool IsFullScreen()
Definition Visualizer.cpp:596
ViewControl & GetViewControl()
Function to retrieve the associated ViewControl.
Definition Visualizer.h:182
Visualizer(const Visualizer &)=delete
void CaptureScreenImage(const std::string &filename="", bool do_render=true)
Function to capture and save a screen image.
Definition VisualizerRender.cpp:249
void Run()
Function to activate the window.
Definition Visualizer.cpp:356
virtual bool UpdateGeometry(std::shared_ptr< const geometry::Geometry > geometry_ptr=nullptr)
Function to update geometry.
Definition Visualizer.cpp:540
std::shared_ptr< glsl::CoordinateFrameRenderer > coordinate_frame_mesh_renderer_ptr_
Definition Visualizer.h:352
virtual bool AddGeometry(std::shared_ptr< const geometry::Geometry > geometry_ptr, bool reset_bounding_box=true)
Function to add geometry to the scene and create corresponding shaders.
Definition Visualizer.cpp:411
Visualizer(Visualizer &&)=delete
virtual void MouseMoveCallback(GLFWwindow *window, double x, double y)
Definition VisualizerCallback.cpp:25
virtual void Render(bool render_screen=false)
Definition VisualizerRender.cpp:77
virtual void WindowResizeCallback(GLFWwindow *window, int w, int h)
Definition VisualizerCallback.cpp:20
std::unordered_map< std::shared_ptr< glsl::GeometryRenderer >, RenderOption > utility_renderer_opts_
Definition Visualizer.h:347
virtual void WindowCloseCallback(GLFWwindow *window)
Function to notify the window to be closed.
Definition VisualizerCallback.cpp:346
std::shared_ptr< geometry::Image > CaptureDepthFloatBuffer(bool do_render=true)
Definition VisualizerRender.cpp:303
virtual bool InitViewControl()
Function to initialize ViewControl.
Definition Visualizer.cpp:321
bool WaitEvents()
Function to process the event queue and return if the window is closed.
Definition Visualizer.cpp:377
virtual bool InitRenderOption()
Function to initialize RenderOption.
Definition Visualizer.cpp:327
std::string GetViewStatus()
Get the current view status as a json string of ViewTrajectory.
Definition VisualizerRender.cpp:185
std::unordered_set< std::shared_ptr< const geometry::Geometry > > geometry_ptrs_
Definition Visualizer.h:333
std::string window_name_
Definition Visualizer.h:286
virtual void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods)
Definition VisualizerCallback.cpp:68
RenderOption & GetRenderOption()
Function to retrieve the associated RenderOption.
Definition Visualizer.h:184
Visualizer & operator=(const Visualizer &)=delete
void SetViewStatus(const std::string &view_status_str)
Set the current view status from a json string of ViewTrajectory.
Definition VisualizerRender.cpp:199
void CopyViewStatusFromClipboard()
Apply the view point from clipboard.
Definition VisualizerRender.cpp:172
virtual ~Visualizer()
Definition Visualizer.cpp:89
void DestroyVisualizerWindow()
Function to destroy a window.
Definition Visualizer.cpp:270
std::vector< std::shared_ptr< glsl::GeometryRenderer > > utility_renderer_ptrs_
Definition Visualizer.h:343
void RequestClose()
Request that the window/context close, mirroring glfwSetWindowShouldClose() but also covering headles...
Definition Visualizer.cpp:308
virtual bool RemoveGeometry(std::shared_ptr< const geometry::Geometry > geometry_ptr, bool reset_bounding_box=true)
Function to remove geometry from the scene.
Definition Visualizer.cpp:506
virtual void MouseScrollCallback(GLFWwindow *window, double x, double y)
Definition VisualizerCallback.cpp:63
const std::string & GetWindowName() const
Definition Visualizer.h:223
GLuint render_rgb_tex_
Definition Visualizer.h:322
virtual void UpdateWindowTitle()
Definition Visualizer.cpp:332
bool headless_
True if no windowing system display is available and rendering is done via an offscreen EGL context o...
Definition Visualizer.h:293
void RegisterAnimationCallback(std::function< bool(Visualizer *)> callback_func)
Function to register a callback function for animation.
Definition Visualizer.cpp:316
std::function< bool(Visualizer *)> animation_callback_func_
Definition Visualizer.h:305
bool ShouldRemainOpen() const
Whether the window/context should stay open, mirroring !glfwWindowShouldClose(window_) but also cover...
Definition Visualizer.cpp:304
virtual void WindowRefreshCallback(GLFWwindow *window)
Callback functions.
Definition VisualizerCallback.cpp:13
Eigen::Vector2i saved_window_size_
Definition Visualizer.h:303
virtual void ToggleFullScreen()
Definition Visualizer.cpp:588
MouseControl mouse_control_
Definition Visualizer.h:314
GLFWwindow * window_
Definition Visualizer.h:285
virtual void PrintVisualizerHelp()
Definition Visualizer.cpp:600
void Close()
Function to to notify the window to be closed.
Definition Visualizer.cpp:372
std::shared_ptr< geometry::TriangleMesh > coordinate_frame_mesh_ptr_
Definition Visualizer.h:350
std::shared_ptr< geometry::Image > CaptureScreenFloatBuffer(bool do_render=true)
Function to capture screen and store RGB in a float buffer.
Definition VisualizerRender.cpp:210
virtual bool HasGeometry() const
Definition Visualizer.cpp:556
bool is_redraw_required_
Definition Visualizer.h:315
Visualizer()
Definition Visualizer.cpp:87
virtual void KeyPressCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
Definition VisualizerCallback.cpp:102
bool should_close_
Requested "window closed" state, used in place of GLFW's window-close state when running headless (no...
Definition Visualizer.h:296
std::unordered_set< std::shared_ptr< glsl::GeometryRenderer > > geometry_renderer_ptrs_
Definition Visualizer.h:337
void CopyViewStatusToClipboard()
Copy the current view status to clipboard.
Definition VisualizerRender.cpp:163
void ResetViewPoint(bool reset_bounding_box=false)
Function to reset view point.
Definition VisualizerRender.cpp:144
int width
Definition FilePCD.cpp:53
int height
Definition FilePCD.cpp:54
Definition PinholeCameraIntrinsic.cpp:16
double mouse_position_x
Definition Visualizer.h:58
bool is_control_key_down
Definition Visualizer.h:54
bool is_mouse_left_button_down
Definition Visualizer.h:52
double mouse_position_y
Definition Visualizer.h:59
bool is_mouse_middle_button_down
Definition Visualizer.h:53
bool is_super_key_down
Definition Visualizer.h:57
bool is_shift_key_down
Definition Visualizer.h:55
bool is_alt_key_down
Definition Visualizer.h:56