scene.h
Go to the documentation of this file.
1 /*
2  * Copyright 2014 Google Inc. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef TANGO_POINT_CLOUD_SCENE_H_
18 #define TANGO_POINT_CLOUD_SCENE_H_
19 
20 #ifdef __ANDROID__
21 #include <jni.h>
22 #endif
23 #include <memory>
24 #include <set>
25 
26 #include "CameraMobile.h"
27 #include <tango-gl/axis.h>
28 #include <tango-gl/camera.h>
29 #include <tango-gl/color.h>
31 #include <tango-gl/grid.h>
32 #include <tango-gl/frustum.h>
33 #include <tango-gl/trace.h>
34 #include <tango-gl/transform.h>
35 #include <tango-gl/util.h>
36 #include <tango-gl/circle.h>
37 
38 #include <rtabmap/core/Transform.h>
39 #include <rtabmap/core/Link.h>
40 
41 #include "point_cloud_drawable.h"
42 #include "graph_drawable.h"
43 #include "bounding_box_drawable.h"
44 #include "background_renderer.h"
45 #include "text_drawable.h"
46 #include "quad_color.h"
47 
48 #include <pcl/point_cloud.h>
49 #include <pcl/point_types.h>
50 
51 // Scene provides OpenGL drawable objects and renders them for visualization.
52 class Scene {
53  public:
54  static const glm::vec3 kHeightOffset;
55  public:
56  // Constructor and destructor.
57  Scene();
58  ~Scene();
59 
60  // Allocate OpenGL resources for rendering.
61  void InitGLContent();
62 
63  // Release non-OpenGL allocated resources.
64  void DeleteResources();
65 
66  // Setup GL view port.
67  void SetupViewPort(int w, int h);
68  int getViewPortWidth() const {return screenWidth_;}
69  int getViewPortHeight() const {return screenHeight_;}
70 
72  void setScreenRotation(rtabmap::ScreenRotation colorCameraToDisplayRotation) {color_camera_to_display_rotation_ = colorCameraToDisplayRotation;}
73 
74  void clear(); // removed all point clouds
75  void clearLines();
76  void clearTexts();
77  void clearQuads();
78  void clearCircles();
79 
80  // Render loop.
81  // @param: cur_pose_transformation, latest pose's transformation.
82  // @param: point_cloud_transformation, pose transformation at point cloud
83  // frame's timestamp.
84  // @param: point_cloud_vertices, point cloud's vertices of the current point
85  // frame.
86  int Render(const float * uvsTransformed = 0, glm::mat4 arViewMatrix = glm::mat4(0), glm::mat4 arProjectionMatrix=glm::mat4(0), const rtabmap::Mesh & occlusionMesh=rtabmap::Mesh(), bool mapping=false);
87 
88  // Set render camera's viewing angle, first person, third person or top down.
89  //
90  // @param: camera_type, camera type includes first person, third person and
91  // top down
94 
95  void SetCameraPose(const rtabmap::Transform & pose); // opengl camera
97  rtabmap::Transform GetOpenGLCameraPose(float * fov = 0) const;
98 
99  // Touch event passed from android activity. This function only support two
100  // touches.
101  //
102  // @param: touch_count, total count for touches.
103  // @param: event, touch event of current touch.
104  // @param: x0, normalized touch location for touch 0 on x axis.
105  // @param: y0, normalized touch location for touch 0 on y axis.
106  // @param: x1, normalized touch location for touch 1 on x axis.
107  // @param: y1, normalized touch location for touch 1 on y axis.
108  void OnTouchEvent(int touch_count, tango_gl::GestureCamera::TouchEvent event,
109  float x0, float y0, float x1, float y1);
110 
111  void updateGraph(
112  const std::map<int, rtabmap::Transform> & poses,
113  const std::multimap<int, rtabmap::Link> & links);
114 
115  void setGraphVisible(bool visible);
116  void setGridVisible(bool visible);
117  void setTraceVisible(bool visible);
118  void setFrustumVisible(bool visible);
119 
120  void addMarker(int id, const rtabmap::Transform & pose);
121  void setMarkerPose(int id, const rtabmap::Transform & pose);
122  bool hasMarker(int id) const;
123  void removeMarker(int id);
124  std::set<int> getAddedMarkers() const;
125 
126  void addCloud(
127  int id,
128  const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
129  const pcl::IndicesPtr & indices,
130  const rtabmap::Transform & pose);
131  void removeCloudOrMesh(int id);
132  void addMesh(
133  int id,
134  const rtabmap::Mesh & mesh,
135  const rtabmap::Transform & pose,
136  bool createWireframe = false);
137  void addLine(
138  int id,
139  const cv::Point3f & pt1,
140  const cv::Point3f & pt2,
141  const tango_gl::Color & color = tango_gl::Color(1.0f, 1.0f, 1.0f));
142  void removeLine(int id);
143  void addText(
144  int id,
145  const std::string & text,
146  const rtabmap::Transform & pose,
147  float size,
148  const tango_gl::Color & color);
149  void removeText(int id);
150  void addQuad(
151  int id,
152  float size,
153  const rtabmap::Transform & pose,
154  const tango_gl::Color & color,
155  float alpha = 1.0f);
156  void addQuad(
157  int id,
158  float widthLeft,
159  float widthRight,
160  float heightBottom,
161  float heightTop,
162  const rtabmap::Transform & pose,
163  const tango_gl::Color & color,
164  float alpha =1.0f);
165  void removeQuad(int id);
166  bool hasQuad(int id) const;
167  void addCircle(
168  int id,
169  float radius,
170  const rtabmap::Transform & pose,
171  const tango_gl::Color & color,
172  float alpha = 1.0f);
173  void removeCircle(int id);
174  bool hasCircle(int id) const;
175 
176  void setCloudPose(int id, const rtabmap::Transform & pose);
177  void setCloudVisible(int id, bool visible);
178  bool hasCloud(int id) const;
179  bool hasMesh(int id) const;
180  bool hasTexture(int id) const;
181  std::set<int> getAddedClouds() const;
182  void updateCloudPolygons(int id, const std::vector<pcl::Vertices> & polygons);
183  void updateMesh(int id, const rtabmap::Mesh & mesh);
184  void updateGains(int id, float gainR, float gainG, float gainB);
185 
186  void setBlending(bool enabled) {blending_ = enabled;}
187  void setMapRendering(bool enabled) {mapRendering_ = enabled;}
188  void setMeshRendering(bool enabled, bool withTexture) {meshRendering_ = enabled; meshRenderingTexture_ = withTexture;}
189  void setPointSize(float size) {pointSize_ = size;}
190  void setFOV(float angle);
191  void setOrthoCropFactor(float value);
192  void setGridRotation(float angleDeg);
193  void setLighting(bool enabled) {lighting_ = enabled;}
194  void setBackfaceCulling(bool enabled) {backfaceCulling_ = enabled;}
195  void setWireframe(bool enabled) {wireFrame_ = enabled;}
197  void setBackgroundColor(float r, float g, float b) {r_=r; g_=g; b_=b;} // 0.0f <> 1.0f
198  void setGridColor(float r, float g, float b);
199 
200  bool isBlending() const {return blending_;}
201  bool isMapRendering() const {return mapRendering_;}
202  bool isMeshRendering() const {return meshRendering_;}
204  float getPointSize() const {return pointSize_;}
205  bool isLighting() const {return lighting_;}
206  bool isBackfaceCulling() const {return backfaceCulling_;}
207  bool isWireframe() const {return wireFrame_;}
208 
210 
211  private:
212  // Camera object that allows user to use touch input to interact with.
214 
215  // Device axis (in device frame of reference).
217 
218  // Device frustum.
220 
221  // Ground grid.
223 
224  // Bounding box
226 
227  // Trace of pose data.
234 
235  std::map<int, tango_gl::Axis*> markers_;
236 
238 
239  std::map<int, PointCloudDrawable*> pointClouds_;
240  std::map<int, tango_gl::Line*> lines_;
241  std::map<int, TextDrawable*> texts_;
242  std::map<int, QuadColor*> quads_;
243  std::map<int, tango_gl::Circle*> circles_;
244 
246 
247  // Shader to display point cloud.
249 
250  bool blending_;
254  float pointSize_;
256  bool lighting_;
260  float r_;
261  float g_;
262  float b_;
265  GLuint depthTexture_; // 0=objects+occlusion
266  GLsizei screenWidth_;
267  GLsizei screenHeight_;
269  cv::Point2f doubleTapPos_;
270 };
271 
272 #endif // TANGO_POINT_CLOUD_SCENE_H_
Scene::hasTexture
bool hasTexture(int id) const
Definition: scene.cpp:1178
Scene::addQuad
void addQuad(int id, float size, const rtabmap::Transform &pose, const tango_gl::Color &color, float alpha=1.0f)
Definition: scene.cpp:1052
Scene::isMeshTexturing
bool isMeshTexturing() const
Definition: scene.h:203
Scene::fboId_
GLuint fboId_
Definition: scene.h:263
Scene::currentPose_
rtabmap::Transform * currentPose_
Definition: scene.h:245
Scene::OnTouchEvent
void OnTouchEvent(int touch_count, tango_gl::GestureCamera::TouchEvent event, float x0, float y0, float x1, float y1)
Definition: scene.cpp:802
Scene::Render
int Render(const float *uvsTransformed=0, glm::mat4 arViewMatrix=glm::mat4(0), glm::mat4 arProjectionMatrix=glm::mat4(0), const rtabmap::Mesh &occlusionMesh=rtabmap::Mesh(), bool mapping=false)
Definition: scene.cpp:425
Scene::b_
float b_
Definition: scene.h:262
Scene::lines_
std::map< int, tango_gl::Line * > lines_
Definition: scene.h:240
Scene::getScreenRotation
rtabmap::ScreenRotation getScreenRotation() const
Definition: scene.h:71
Scene
Definition: scene.h:52
background_renderer.h
Scene::clearLines
void clearLines()
Definition: scene.cpp:225
Scene::setScreenRotation
void setScreenRotation(rtabmap::ScreenRotation colorCameraToDisplayRotation)
Definition: scene.h:72
Scene::screenWidth_
GLsizei screenWidth_
Definition: scene.h:266
CameraMobile.h
Scene::pointClouds_
std::map< int, PointCloudDrawable * > pointClouds_
Definition: scene.h:239
Scene::graphVisible_
bool graphVisible_
Definition: scene.h:230
Scene::getViewPortWidth
int getViewPortWidth() const
Definition: scene.h:68
Scene::clear
void clear()
Definition: scene.cpp:193
b
Array< int, 3, 1 > b
Scene::rboId_
GLuint rboId_
Definition: scene.h:264
Scene::setGridColor
void setGridColor(float r, float g, float b)
Definition: scene.cpp:1215
Scene::setGridVisible
void setGridVisible(bool visible)
Definition: scene.cpp:839
bounding_box_drawable.h
Scene::texts_
std::map< int, TextDrawable * > texts_
Definition: scene.h:241
Scene::wireFrame_
bool wireFrame_
Definition: scene.h:258
Scene::graph_shader_program_
GLuint graph_shader_program_
Definition: scene.h:248
Scene::screenHeight_
GLsizei screenHeight_
Definition: scene.h:267
size
Index size
Scene::r_
float r_
Definition: scene.h:260
Scene::isMeshRendering
bool isMeshRendering() const
Definition: scene.h:202
Scene::~Scene
~Scene()
Definition: scene.cpp:112
Scene::isMapRendering
bool isMapRendering() const
Definition: scene.h:201
Scene::frustum_
tango_gl::Frustum * frustum_
Definition: scene.h:219
Scene::addCircle
void addCircle(int id, float radius, const rtabmap::Transform &pose, const tango_gl::Color &color, float alpha=1.0f)
Definition: scene.cpp:1111
Scene::backfaceCulling_
bool backfaceCulling_
Definition: scene.h:257
Scene::addMesh
void addMesh(int id, const rtabmap::Mesh &mesh, const rtabmap::Transform &pose, bool createWireframe=false)
Definition: scene.cpp:927
Transform.h
trace.h
Scene::g_
float g_
Definition: scene.h:261
util.h
Scene::setWireframe
void setWireframe(bool enabled)
Definition: scene.h:195
quad_color.h
tango_gl::GestureCamera::GetCameraType
CameraType GetCameraType() const
Definition: gesture_camera.h:68
tango_gl::Axis
Definition: axis.h:23
Scene::updateCloudPolygons
void updateCloudPolygons(int id, const std::vector< pcl::Vertices > &polygons)
Definition: scene.cpp:1188
grid.h
Scene::SetupViewPort
void SetupViewPort(int w, int h)
Definition: scene.cpp:259
Scene::getAddedClouds
std::set< int > getAddedClouds() const
Definition: scene.cpp:1183
circle.h
Scene::getAddedMarkers
std::set< int > getAddedMarkers() const
Definition: scene.cpp:897
Scene::hasCircle
bool hasCircle(int id) const
Definition: scene.cpp:1144
Scene::setBackfaceCulling
void setBackfaceCulling(bool enabled)
Definition: scene.h:194
Scene::quads_
std::map< int, QuadColor * > quads_
Definition: scene.h:242
tango_gl::GestureCamera
Definition: gesture_camera.h:26
glm::detail::tvec3
Definition: type_mat.hpp:37
Scene::setFOV
void setFOV(float angle)
Definition: scene.cpp:775
Scene::setMeshRendering
void setMeshRendering(bool enabled, bool withTexture)
Definition: scene.h:188
Scene::clearQuads
void clearQuads()
Definition: scene.cpp:241
Scene::removeMarker
void removeMarker(int id)
Definition: scene.cpp:888
glm::detail::tmat4x4
Definition: type_mat.hpp:47
BackgroundRenderer
Definition: background_renderer.h:52
Scene::getViewPortHeight
int getViewPortHeight() const
Definition: scene.h:69
Scene::lighting_
bool lighting_
Definition: scene.h:256
graph_drawable.h
rtabmap::Mesh
Definition: util.h:165
Scene::addLine
void addLine(int id, const cv::Point3f &pt1, const cv::Point3f &pt2, const tango_gl::Color &color=tango_gl::Color(1.0f, 1.0f, 1.0f))
Definition: scene.cpp:994
Scene::updateGains
void updateGains(int id, float gainR, float gainG, float gainB)
Definition: scene.cpp:1206
tango_gl::GestureCamera::CameraType
CameraType
Definition: gesture_camera.h:28
Scene::isWireframe
bool isWireframe() const
Definition: scene.h:207
Scene::meshRenderingTexture_
bool meshRenderingTexture_
Definition: scene.h:253
Scene::isBlending
bool isBlending() const
Definition: scene.h:200
Scene::blending_
bool blending_
Definition: scene.h:250
axis.h
Scene::frustumVisible_
bool frustumVisible_
Definition: scene.h:233
GLuint
unsigned int GLuint
Definition: dummy.cpp:78
Scene::Scene
Scene()
Definition: scene.cpp:71
GraphDrawable
Definition: graph_drawable.h:43
g
float g
Scene::clearTexts
void clearTexts()
Definition: scene.cpp:233
Scene::background_renderer_
BackgroundRenderer * background_renderer_
Definition: scene.h:209
BoundingBoxDrawable
Definition: bounding_box_drawable.h:33
Scene::isBackfaceCulling
bool isBackfaceCulling() const
Definition: scene.h:206
frustum.h
Scene::setMapRendering
void setMapRendering(bool enabled)
Definition: scene.h:187
Scene::markers_
std::map< int, tango_gl::Axis * > markers_
Definition: scene.h:235
Scene::textureColorSeamsHidden_
bool textureColorSeamsHidden_
Definition: scene.h:259
Scene::GetCameraPose
rtabmap::Transform GetCameraPose() const
Definition: scene.h:96
Scene::addMarker
void addMarker(int id, const rtabmap::Transform &pose)
Definition: scene.cpp:855
text_drawable.h
tango_gl::GestureCamera::TouchEvent
TouchEvent
Definition: gesture_camera.h:36
Scene::removeQuad
void removeQuad(int id)
Definition: scene.cpp:1096
Scene::setLighting
void setLighting(bool enabled)
Definition: scene.h:193
tango_gl::Trace
Definition: trace.h:23
Scene::DeleteResources
void DeleteResources()
Definition: scene.cpp:156
Scene::grid_
tango_gl::Grid * grid_
Definition: scene.h:222
Scene::setOrthoCropFactor
void setOrthoCropFactor(float value)
Definition: scene.cpp:779
Scene::InitGLContent
void InitGLContent()
Definition: scene.cpp:119
Scene::depthTexture_
GLuint depthTexture_
Definition: scene.h:265
Scene::setBlending
void setBlending(bool enabled)
Definition: scene.h:186
Scene::doubleTapPos_
cv::Point2f doubleTapPos_
Definition: scene.h:269
Scene::setBackgroundColor
void setBackgroundColor(float r, float g, float b)
Definition: scene.h:197
glm::angle
GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
Scene::addCloud
void addCloud(int id, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const rtabmap::Transform &pose)
Definition: scene.cpp:902
tango_gl::Frustum
Definition: frustum.h:23
Scene::doubleTapOn_
bool doubleTapOn_
Definition: scene.h:268
Scene::setCloudVisible
void setCloudVisible(int id, bool visible)
Definition: scene.cpp:1159
Scene::clearCircles
void clearCircles()
Definition: scene.cpp:249
Scene::graph_
GraphDrawable * graph_
Definition: scene.h:229
camera.h
Scene::setPointSize
void setPointSize(float size)
Definition: scene.h:189
Scene::SetCameraPose
void SetCameraPose(const rtabmap::Transform &pose)
Definition: scene.cpp:765
Scene::removeCircle
void removeCircle(int id)
Definition: scene.cpp:1134
Scene::hasCloud
bool hasCloud(int id) const
Definition: scene.cpp:1168
Scene::mapRendering_
bool mapRendering_
Definition: scene.h:251
rtabmap::Transform
Definition: Transform.h:41
tango_gl::Grid
Definition: grid.h:23
tango_gl::Color
Definition: color.h:21
Scene::hasQuad
bool hasQuad(int id) const
Definition: scene.cpp:1106
Scene::SetCameraType
void SetCameraType(tango_gl::GestureCamera::CameraType camera_type)
Definition: scene.cpp:761
Scene::removeLine
void removeLine(int id)
Definition: scene.cpp:1018
Scene::updateGraph
void updateGraph(const std::map< int, rtabmap::Transform > &poses, const std::multimap< int, rtabmap::Link > &links)
Definition: scene.cpp:823
rtabmap::ScreenRotation
ScreenRotation
Definition: util.h:194
Scene::updateMesh
void updateMesh(int id, const rtabmap::Mesh &mesh)
Definition: scene.cpp:1197
Scene::axis_
tango_gl::Axis * axis_
Definition: scene.h:216
transform.h
Scene::trace_
tango_gl::Trace * trace_
Definition: scene.h:228
Scene::circles_
std::map< int, tango_gl::Circle * > circles_
Definition: scene.h:243
Scene::color_camera_to_display_rotation_
rtabmap::ScreenRotation color_camera_to_display_rotation_
Definition: scene.h:237
Scene::setMarkerPose
void setMarkerPose(int id, const rtabmap::Transform &pose)
Definition: scene.cpp:871
Scene::setTraceVisible
void setTraceVisible(bool visible)
Definition: scene.cpp:844
Scene::pointSize_
float pointSize_
Definition: scene.h:254
color.h
Scene::kHeightOffset
static const glm::vec3 kHeightOffset
Definition: scene.h:54
Scene::setFrustumVisible
void setFrustumVisible(bool visible)
Definition: scene.cpp:849
Scene::setGridRotation
void setGridRotation(float angleDeg)
Definition: scene.cpp:783
Scene::addText
void addText(int id, const std::string &text, const rtabmap::Transform &pose, float size, const tango_gl::Color &color)
Definition: scene.cpp:1028
Scene::getPointSize
float getPointSize() const
Definition: scene.h:204
Scene::meshRendering_
bool meshRendering_
Definition: scene.h:252
gesture_camera.h
Scene::setGraphVisible
void setGraphVisible(bool visible)
Definition: scene.cpp:834
Scene::gesture_camera_
tango_gl::GestureCamera * gesture_camera_
Definition: scene.h:213
Scene::setTextureColorSeamsHidden
void setTextureColorSeamsHidden(bool hidden)
Definition: scene.h:196
Scene::hasMesh
bool hasMesh(int id) const
Definition: scene.cpp:1173
Scene::GetOpenGLCameraPose
rtabmap::Transform GetOpenGLCameraPose(float *fov=0) const
Definition: scene.cpp:793
Scene::removeCloudOrMesh
void removeCloudOrMesh(int id)
Definition: scene.cpp:917
Scene::box_
BoundingBoxDrawable * box_
Definition: scene.h:225
Scene::gridVisible_
bool gridVisible_
Definition: scene.h:231
Scene::isLighting
bool isLighting() const
Definition: scene.h:205
Scene::traceVisible_
bool traceVisible_
Definition: scene.h:232
Scene::boundingBoxRendering_
bool boundingBoxRendering_
Definition: scene.h:255
Scene::GetCameraType
tango_gl::GestureCamera::CameraType GetCameraType() const
Definition: scene.h:93
Scene::removeText
void removeText(int id)
Definition: scene.cpp:1042
Scene::hasMarker
bool hasMarker(int id) const
Definition: scene.cpp:884
Scene::setCloudPose
void setCloudPose(int id, const rtabmap::Transform &pose)
Definition: scene.cpp:1149
point_cloud_drawable.h


rtabmap
Author(s): Mathieu Labbe
autogenerated on Mon Apr 28 2025 02:45:59