candlewick 0.6.0
A tiny cross-platform renderer based on SDL3
Loading...
Searching...
No Matches
Visualizer.h
Go to the documentation of this file.
1
4#pragma once
5
6#include "RobotScene.h"
8#include "../core/GuiSystem.h"
12#ifdef CANDLEWICK_WITH_FFMPEG_SUPPORT
14#endif
15
16#include <pinocchio/visualizers/base-visualizer.hpp>
17#include <SDL3/SDL_mouse.h>
18#include <entt/entity/registry.hpp>
19
20namespace candlewick::multibody {
21
22namespace {
23 using pinocchio::visualizers::BaseVisualizer;
24 using pinocchio::visualizers::ConstVectorRef;
25 using pinocchio::visualizers::Vector3;
26 using pinocchio::visualizers::VectorXs;
27} // namespace
28
32 float rotSensitivity = 5e-3f;
33 float panSensitivity = 5e-3f;
34 float zoomSensitivity = 0.05f;
35 float localRotSensitivity = 0.01f;
36 bool yInvert = false;
37
38 // Mouse button modifiers
39 struct MouseConfig {
40 Uint8 rotButton = SDL_BUTTON_LEFT;
41 Uint8 panButton = SDL_BUTTON_MIDDLE;
42 Uint8 yRotButton = SDL_BUTTON_RIGHT;
44};
45
47 CameraControlParams &params);
48
54class Visualizer final : public BaseVisualizer {
55 bool m_cameraControl = true;
56 bool m_showGui = true;
57 bool m_shouldExit = false;
58 entt::entity m_grid, m_triad;
59 std::string m_currentScreenshotFilename{};
60 RobotDebugSystem *robotDebug = nullptr;
61 std::vector<entt::entity> m_debug_frame_pos;
62 std::vector<entt::entity> m_debug_frame_vel;
63
64 void initialize();
65
66 void render();
67
68 void displayPrecall() override {}
69
70 void displayImpl() override;
71
72 GuiSystem::GuiBehavior getDefaultCallback() {
73 return [this](auto &) { this->defaultGuiCallback(); };
74 }
75
76public:
77 static constexpr Radf DEFAULT_FOV = 55.0_degf;
78
79 struct EnvStatus {
80 bool show_our_about = false;
81 bool show_imgui_about = false;
82 };
83
84 using BaseVisualizer::setCameraPose;
85 entt::registry registry;
94
95 struct Config {
96 Uint32 width;
97 Uint32 height;
98 SDL_GPUTextureFormat depth_stencil_format = SDL_GPU_TEXTUREFORMAT_D16_UNORM;
99 };
100
104
106
107 void loadViewerModel() override;
108
109 Visualizer(const Config &config, const pin::Model &model,
110 const pin::GeometryModel &visual_model,
111 GuiSystem::GuiBehavior gui_callback);
112
113 Visualizer(const Config &config, const pin::Model &model,
114 const pin::GeometryModel &visual_model, pin::Data &data,
115 pin::GeometryData &visual_data, GuiSystem::GuiBehavior callback);
116
117 Visualizer(const Config &config, const pin::Model &model,
118 const pin::GeometryModel &visual_model)
119 : Visualizer(config, model, visual_model, getDefaultCallback()) {}
120
121 Visualizer(const Config &config, const pin::Model &model,
122 const pin::GeometryModel &visual_model, pin::Data &data,
123 pin::GeometryData &visual_data)
124 : Visualizer(config, model, visual_model, data, visual_data,
125 getDefaultCallback()) {}
126
127 ~Visualizer() override;
128
129 const Device &device() const { return renderer.device; }
130
131 void setCameraTarget(const Eigen::Ref<const Vector3> &target) override;
132
133 void setCameraPosition(const Eigen::Ref<const Vector3> &position) override;
134
135 void setCameraPose(const Eigen::Ref<const Matrix4> &pose) override;
136
137 void enableCameraControl(bool v) override { m_cameraControl = v; }
138
140
141 [[nodiscard]] bool shouldExit() const noexcept { return m_shouldExit; }
142
143 void takeScreenshot(std::string_view filename);
144
145 void startRecording(std::string_view filename);
146
148
149#ifdef CANDLEWICK_WITH_FFMPEG_SUPPORT
150 auto &videoSettings() { return m_videoSettings; }
151#endif
152
163 void addFrameViz(pin::FrameIndex id, bool show_velocity = true);
164
167 registry.destroy(m_debug_frame_pos.begin(), m_debug_frame_pos.end());
168 registry.destroy(m_debug_frame_vel.begin(), m_debug_frame_vel.end());
169 m_debug_frame_pos.clear();
170 m_debug_frame_vel.clear();
171 }
172
174 void clean() override {
176 robotScene.clearEnvironment();
177 robotScene.clearRobotGeometries();
178 }
179
180private:
181 media::TransferBufferPool m_transferBuffers;
182#ifdef CANDLEWICK_WITH_FFMPEG_SUPPORT
183 std::string m_currentVideoFilename{};
184 media::VideoRecorder m_videoRecorder;
185 media::VideoRecorder::Settings m_videoSettings;
186#endif
187};
188
189} // namespace candlewick::multibody
Scene for organizing debug entities and render systems.
Definition DebugScene.h:44
Definition GuiSystem.h:13
std::function< void(const RenderContext &)> GuiBehavior
Definition GuiSystem.h:18
Transfer buffer for the texture downloader.
Definition WriteTextureToImage.h:19
Definition VideoRecorder.h:20
A render system for Pinocchio robot geometries using Pinocchio.
Definition RobotScene.h:50
void clean() override
Clear objects.
Definition Visualizer.h:174
void startRecording(std::string_view filename)
void removeFramesViz()
Remove all frame visualizations.
Definition Visualizer.h:166
DebugScene debugScene
Definition Visualizer.h:89
bool shouldExit() const noexcept
Definition Visualizer.h:141
RobotScene robotScene
Definition Visualizer.h:88
Visualizer(const Config &config, const pin::Model &model, const pin::GeometryModel &visual_model, pin::Data &data, pin::GeometryData &visual_data)
Definition Visualizer.h:121
void defaultGuiCallback()
Default GUI callback for the Visualizer; provide your own callback to the Visualizer constructor to c...
void addFrameViz(pin::FrameIndex id, bool show_velocity=true)
Add visualization for a given frame.
CameraControlParams cameraParams
Definition Visualizer.h:91
AABB worldSceneBounds
Definition Visualizer.h:93
Visualizer(const Config &config, const pin::Model &model, const pin::GeometryModel &visual_model, pin::Data &data, pin::GeometryData &visual_data, GuiSystem::GuiBehavior callback)
void setCameraTarget(const Eigen::Ref< const Vector3 > &target) override
Visualizer(const Config &config, const pin::Model &model, const pin::GeometryModel &visual_model)
Definition Visualizer.h:117
entt::registry registry
Definition Visualizer.h:85
CylindricalCamera controller
Definition Visualizer.h:90
EnvStatus envStatus
Definition Visualizer.h:92
Visualizer(const Config &config, const pin::Model &model, const pin::GeometryModel &visual_model, GuiSystem::GuiBehavior gui_callback)
RenderContext renderer
Definition Visualizer.h:86
static constexpr Radf DEFAULT_FOV
Definition Visualizer.h:77
void takeScreenshot(std::string_view filename)
void setCameraPose(const Eigen::Ref< const Matrix4 > &pose) override
void setCameraPosition(const Eigen::Ref< const Vector3 > &position) override
const Device & device() const
Definition Visualizer.h:129
GuiSystem guiSystem
Definition Visualizer.h:87
void enableCameraControl(bool v) override
Definition Visualizer.h:137
Rad< float > Radf
Definition math_types.h:125
Support for the Pinocchio rigid-body algorithms library and the Coal collision detection library.
Definition LoadPinocchioGeometry.h:8
void guiAddCameraParams(CylindricalCamera &controller, CameraControlParams &params)
Definition CameraControls.h:68
RAII wrapper for SDL_GPUDevice.
Definition Device.h:17
The RenderContext class provides a rendering context for a graphical application.
Definition RenderContext.h:20
Definition VideoRecorder.h:26
struct candlewick::multibody::CameraControlParams::MouseConfig mouseButtons
float localRotSensitivity
Definition Visualizer.h:35
float panSensitivity
Definition Visualizer.h:33
float zoomSensitivity
Definition Visualizer.h:34
float rotSensitivity
Definition Visualizer.h:32
bool yInvert
Definition Visualizer.h:36
A debug system for use with Pinocchio geometries.
Definition RobotDebug.h:12
Uint32 height
Definition Visualizer.h:97
Uint32 width
Definition Visualizer.h:96
SDL_GPUTextureFormat depth_stencil_format
Definition Visualizer.h:98
bool show_our_about
Definition Visualizer.h:80
bool show_imgui_about
Definition Visualizer.h:81