Ocean
Loading...
Searching...
No Matches
TextureGenerator.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_TRACKING_MAPTEXTURING_TEXTURE_GENERATOR_H
9#define META_OCEAN_TRACKING_MAPTEXTURING_TEXTURE_GENERATOR_H
10
22
23#include "ocean/base/Frame.h"
24
26
29
31
35
36namespace Ocean
37{
38
39namespace Tracking
40{
41
42namespace MapTexturing
43{
44
45/**
46 * This class implements a texture generator for scene elements.
47 * The generator separates the scene elements into individual meshes sharing the same texture.
48 * @ingroup trackingmaptexturing
49 */
50class OCEAN_TRACKING_MAPTEXTURING_EXPORT TextureGenerator
51{
52 public:
53
54 /**
55 * Definition of individual texturing modes.
56 */
57 enum TexturingMode : uint32_t
58 {
59 /// An invalid texturing mode.
60 TM_INVALID = 0u,
61 /// Keeping retired triangles.
63 /// Redraw retired triangles.
64 TM_REDRAW_RETIRED
65 };
66
67 /**
68 * This class stores the relevant information of a mesh textures with the same texture.
69 */
70 class Mesh
71 {
72 public:
73
74 /// The vertices of the mesh.
76
77 /// The triangle faces of the mesh.
79
80 /// The texture coordinates, one for each vertex.
82 };
83
84 /**
85 * Definition of an unordered map mapping Mesh ids to mesh objects.
86 */
87 typedef std::unordered_map<Index32, Mesh> MeshMap;
88
89 protected:
90
91 /**
92 * This class stores the relevant information for a triangle.
93 */
95 {
96 public:
97
98 /**
99 * Creates a new triangle object.
100 * @param id The id of the triangle
101 * @param frameIndex The index of the frame in which the triangle has been created
102 */
103 inline TriangleObject(const Index32 id, const Index32 frameIndex);
104
105 public:
106
107 /// The unique ids of the triangle.
108 Index32 id_ = Index32(-1);
109
110 /// The index of the frame in which the triangle existed the last time.
111 Index32 frameIndex_ = Index32(-1);
112 };
113
114 /**
115 * Definition of an unordered map mapping hash-able triangles to a TriangleObject objects.
116 */
117 typedef std::unordered_map<HashableTriangle, TriangleObject, HashableTriangle> TriangleMap;
118
119 /**
120 * Definition of a vector holding hash-able triangle objects.
121 */
122 typedef std::vector<HashableTriangle> Triangles;
123
124 /**
125 * Definition of a map mapping unique scene mesh ids to vertex counts.
126 */
127 typedef std::unordered_map<Index32, size_t> SceneMeshVertexCounterMap;
128
129 /**
130 * Definition of an unordered map mapping mesh ids to texture framebuffers.
131 */
132 typedef std::unordered_map<Index32, Rendering::TextureFramebufferRef> TextureFramebufferMap;
133
134 public:
135
136 /**
137 * Creates a new texture generator.
138 * @param texturingMode The texturing mode to be used
139 */
140 explicit inline TextureGenerator(const TexturingMode texturingMode = TM_REDRAW_RETIRED);
141
142 /**
143 * Updates the generator's meshes with new meshes given as scene elements.
144 * The mesh can be updated before each new frame is processed or with a lower frequency (e.g., only for every second frame or only once before the very first frame).
145 * @param sceneElement The new scene element to be used to update the generator
146 * @param skipIfVertexNumberHasNotChanged True, to skip all meshes when their vertex number has not changed; False, to handle meshes even when their vertex number have not changed
147 * @return True, if succeeded
148 */
149 bool updateMesh(const Devices::SceneTracker6DOF::SharedSceneElement& sceneElement, const bool skipIfVertexNumberHasNotChanged);
150
151 /**
152 * Processes a new frame and updates or sets the texture of the texture atlases whenever necessary.
153 * @param rgbFrame The new frame to be used, with pixel format FORMAT_RGB24, must be valid
154 * @param anyCamera The camera profile defining the projection of the given frame, must be valid
155 * @param world_T_camera The transformation between camera and world, with the camera pointing into the negative z-space with y-axis up, must be valid
156 * @param engine The rendering engine to be used, must be valid
157 * @return True, if succeeded
158 */
159 bool processFrame(Frame&& rgbFrame, const AnyCamera& anyCamera, const HomogenousMatrix4& world_T_camera, const Rendering::EngineRef& engine);
160
161 /**
162 * Renders the current textured mesh for a given camera pose.
163 * @param anyCamera The camera profile used when rendering the image, must be valid
164 * @param world_T_camera The transformation between camera and world, must be valid
165 * @param engine The rendering engine to be used, must be valid
166 * @param renderTexturedTrianglesOnly True, to render only textured triangles; False, to render also non-textured triangles
167 * @param frame The resulting rendered frame
168 * @return True, if succeeded
169 */
170 bool render(const AnyCamera& anyCamera, const HomogenousMatrix4& world_T_camera, const Rendering::EngineRef& engine, const bool renderTexturedTrianglesOnly, Frame& frame);
171
172 /**
173 * Returns the ids of the generated textured meshes.
174 * @return The meshes' ids
175 */
177
178 /**
179 * Returns a current mesh.
180 * @param meshId The id of the mesh to return
181 * @param mesh The resulting mesh
182 * @param meshTexture The resulting texture of the mesh, invalid if the mesh is not textured
183 * @return True, if succeeded
184 */
185 bool exportMesh(const Index32 meshId, Mesh& mesh, Frame& meshTexture);
186
187 /**
188 * Exports all currently textured meshes and creates an X3D scene file.
189 * @param filename The filename of the resulting scene file
190 * @param exportTexturedTrianglesOnly True, to export only textured triangles; False, to export also non-textured triangles
191 * @return True, if succeeded
192 */
193 bool exportMeshs(const std::string& filename, const bool exportTexturedTrianglesOnly);
194
195 /**
196 * Returns whether this generator holds at least one triangle.
197 * @return True, if succeeded
198 */
199 inline bool isValid() const;
200
201 protected:
202
203 /**
204 * Processes a new frame and updates or sets the texture of the texture atlases whenever necessary with texturing mode TM_KEEP_RETIRED.
205 * @param rgbFrame The new frame to be used, with pixel format FORMAT_RGB24, must be valid
206 * @param anyCamera The camera profile defining the projection of the given frame, must be valid
207 * @param world_T_camera The transformation between camera and world, with the camera pointing into the negative z-space with y-axis up, must be valid
208 * @param engine The rendering engine to be used, must be valid
209 * @return True, if succeeded
210 */
211 bool processFrameKeepRetired(Frame&& rgbFrame, const AnyCamera& anyCamera, const HomogenousMatrix4& world_T_camera, const Rendering::EngineRef& engine);
212
213 /**
214 * Processes a new frame and updates or sets the texture of the texture atlases whenever necessary with texturing mode TM_REDRAW_RETIRED.
215 * @param rgbFrame The new frame to be used, with pixel format FORMAT_RGB24, must be valid
216 * @param anyCamera The camera profile defining the projection of the given frame, must be valid
217 * @param world_T_camera The transformation between camera and world, with the camera pointing into the negative z-space with y-axis up, must be valid
218 * @param engine The rendering engine to be used, must be valid
219 * @return True, if succeeded
220 */
221 bool processFrameRedrawRetired(Frame&& rgbFrame, const AnyCamera& anyCamera, const HomogenousMatrix4& world_T_camera, const Rendering::EngineRef& engine);
222
223 /**
224 * Extracts a mesh of this texture generator with texture coordinates associated with the texture atlas.
225 * @param meshId The id of the mesh to extract
226 * @param mesh The resulting mesh
227 * @return True, if at least one triangle was extracted
228 */
230
231 /**
232 * Extracts all meshes of this texture generator with texture coordinates associated with the texture atlas.
233 * @param meshMap The resulting map with the individual meshes
234 * @param exportTexturedTrianglesOnly True, to extract only textured triangles; False, to extract also non-textured triangles
235 * @return True, if at least one triangle was extracted
236 */
237 bool extractMeshesWithAtlasTextureCoordinates(MeshMap& meshMap, const bool exportTexturedTrianglesOnly);
238
239 /**
240 * Returns an invalid triangle id.
241 * @return The invalid triangle id
242 */
243 static constexpr Index32 invalidTriangleId();
244
245 protected:
246
247 /// The texturing mode to be used.
248 TexturingMode texturingMode_ = TM_INVALID;
249
250 /// The counter for triangle ids.
251 Index32 triangleIdCounter_ = invalidTriangleId();
252
253 /// The map mapping hash-able triangles to triangle objects.
255
256 /// The vector of all triangles, with ids identical to indices.
257 Triangles triangles_ = Triangles(1024 * 1024);
258
259 /// The ids of triangles which can be reused as they have been deleted before.
261
262 /// The current frame index.
263 unsigned int frameIndex_ = 0u;
264
265 /// The dummy framebuffer for platforms not having their own main framebuffer.
267
268 /// The renderer able to render triangles with individual color ids of all active triangles (not including retired triangles).
270
271 /// The renderer able to render triangles with individual color ids of all existing triangles (active and retired triangles).
273
274#ifndef OCEAN_PLATFORM_BUILD_APPLE_IOS_ANY
275
276 /// The renderer able to render textured triangles to the texture atlas.
278
279#endif
280
281 /// The renderer able to render textured triangles to the texture atlas.
283
284 /// The renderer able to render all retired triangles.
286
287 /// The renderer able to down-sample and to filter a depth buffer.
289
290 /// The renderer able to determine which triangles are visible.
292
293 /// The renderer able to manage the states of all textures.
295
296 /// The renderer for the entire mesh.
298
299 /// The profile of the texture atlas to be used for all textures.
301
302 /// Reusable frame for triangle ids.
304
305 /// Reusable frame for the z-buffer.
307
308 /// The ids of all new triangles since the last update call.
310
311 /// The ids of all retired triangles since the last update call.
313
314 /// The reusable vector holding ids of deleted triangle.
316
317 /// The vertex set holding the vertices to be rendered.
319
320 /// The triangle object which will be used to render the triangles.
322
323 /// True, if any mesh scene mesh has changed.
324 bool anySceneMeshHasChanged_ = false;
325
326 /// The latest vertex counts of all scene meshes.
328
329 /// The generator's lock.
330 mutable Lock lock_;
331};
332
334 texturingMode_(texturingMode)
335{
336 // nothing to do here
337}
338
340 id_(id),
341 frameIndex_(frameIndex)
342{
343 // nothing to do here
344}
345
346inline bool TextureGenerator::isValid() const
347{
348 return !triangleMap_.empty();
349}
350
352{
353 return 0u;
354}
355
356}
357
358}
359
360}
361
362#endif // META_OCEAN_TRACKING_MAPTEXTURING_TEXTURE_GENERATOR_H
This class implements the abstract base class for all AnyCamera objects.
Definition AnyCamera.h:130
std::shared_ptr< SceneElement > SharedSceneElement
Definition of a shared pointer holding a scene element.
Definition SceneTracker6DOF.h:910
This class implements Ocean's image class.
Definition Frame.h:1808
This class implements a recursive lock object.
Definition Lock.h:31
This class implements a renderer for a depth buffer.
Definition DepthBufferRenderer.h:33
This class implements a renderer for the entire mesh.
Definition MeshRenderer.h:41
This class implements a renderer for retired triangle allowing to determine whether they can be delet...
Definition RetiredTrianglesRenderer.h:37
This class implements a texture atlas for triangles with regular shape.
Definition TextureAtlas.h:31
This class stores the relevant information of a mesh textures with the same texture.
Definition TextureGenerator.h:71
Vectors2 textureCoordinates_
The texture coordinates, one for each vertex.
Definition TextureGenerator.h:81
Vectors3 vertices_
The vertices of the mesh.
Definition TextureGenerator.h:75
Rendering::TriangleFaces triangleFaces_
The triangle faces of the mesh.
Definition TextureGenerator.h:78
This class stores the relevant information for a triangle.
Definition TextureGenerator.h:95
TriangleObject(const Index32 id, const Index32 frameIndex)
Creates a new triangle object.
Definition TextureGenerator.h:339
This class implements a texture generator for scene elements.
Definition TextureGenerator.h:51
TrianglesIdRenderer activeTrianglesIdRenderer_
The renderer able to render triangles with individual color ids of all active triangles (not includin...
Definition TextureGenerator.h:269
Lock lock_
The generator's lock.
Definition TextureGenerator.h:330
TextureAtlas textureAtlas_
The profile of the texture atlas to be used for all textures.
Definition TextureGenerator.h:300
TexturingMode
Definition of individual texturing modes.
Definition TextureGenerator.h:58
@ TM_KEEP_RETIRED
Keeping retired triangles.
Definition TextureGenerator.h:62
TexturedTrianglesRenderer texturedTrianglesRenderer_
The renderer able to render textured triangles to the texture atlas.
Definition TextureGenerator.h:277
SceneMeshVertexCounterMap latestSceneMeshVertexCounterMap_
The latest vertex counts of all scene meshes.
Definition TextureGenerator.h:327
Rendering::FramebufferRef dummyFramebuffer_
The dummy framebuffer for platforms not having their own main framebuffer.
Definition TextureGenerator.h:266
Frame reusableDepthFrame_
Reusable frame for the z-buffer.
Definition TextureGenerator.h:306
Indices32 retiredTriangleIds_
The ids of all retired triangles since the last update call.
Definition TextureGenerator.h:312
std::vector< HashableTriangle > Triangles
Definition of a vector holding hash-able triangle objects.
Definition TextureGenerator.h:122
std::unordered_map< HashableTriangle, TriangleObject, HashableTriangle > TriangleMap
Definition of an unordered map mapping hash-able triangles to a TriangleObject objects.
Definition TextureGenerator.h:117
TriangleMap triangleMap_
The map mapping hash-able triangles to triangle objects.
Definition TextureGenerator.h:254
bool extractMeshesWithAtlasTextureCoordinates(MeshMap &meshMap, const bool exportTexturedTrianglesOnly)
Extracts all meshes of this texture generator with texture coordinates associated with the texture at...
Indices32 freeTriangleIds_
The ids of triangles which can be reused as they have been deleted before.
Definition TextureGenerator.h:260
std::unordered_map< Index32, Mesh > MeshMap
Definition of an unordered map mapping Mesh ids to mesh objects.
Definition TextureGenerator.h:87
TrianglesIdRenderer anyTrianglesIdRenderer_
The renderer able to render triangles with individual color ids of all existing triangles (active and...
Definition TextureGenerator.h:272
bool render(const AnyCamera &anyCamera, const HomogenousMatrix4 &world_T_camera, const Rendering::EngineRef &engine, const bool renderTexturedTrianglesOnly, Frame &frame)
Renders the current textured mesh for a given camera pose.
bool exportMeshs(const std::string &filename, const bool exportTexturedTrianglesOnly)
Exports all currently textured meshes and creates an X3D scene file.
RetiredTrianglesRenderer retiredTrianglesRenderer_
The renderer able to render all retired triangles.
Definition TextureGenerator.h:285
TexturedTrianglesRendererBackup texturedTrianglesRendererBackup_
The renderer able to render textured triangles to the texture atlas.
Definition TextureGenerator.h:282
std::unordered_map< Index32, size_t > SceneMeshVertexCounterMap
Definition of a map mapping unique scene mesh ids to vertex counts.
Definition TextureGenerator.h:127
bool processFrame(Frame &&rgbFrame, const AnyCamera &anyCamera, const HomogenousMatrix4 &world_T_camera, const Rendering::EngineRef &engine)
Processes a new frame and updates or sets the texture of the texture atlases whenever necessary.
VisibleTrianglesRenderer visibleTrianglesRenderer_
The renderer able to determine which triangles are visible.
Definition TextureGenerator.h:291
std::unordered_map< Index32, Rendering::TextureFramebufferRef > TextureFramebufferMap
Definition of an unordered map mapping mesh ids to texture framebuffers.
Definition TextureGenerator.h:132
Frame reusableIdFrame_
Reusable frame for triangle ids.
Definition TextureGenerator.h:303
TrianglesManagerRenderer trianglesManagerRenderer_
The renderer able to manage the states of all textures.
Definition TextureGenerator.h:294
Rendering::VertexSetRef renderingVertexSet_
The vertex set holding the vertices to be rendered.
Definition TextureGenerator.h:318
MeshRenderer meshRenderer_
The renderer for the entire mesh.
Definition TextureGenerator.h:297
bool processFrameRedrawRetired(Frame &&rgbFrame, const AnyCamera &anyCamera, const HomogenousMatrix4 &world_T_camera, const Rendering::EngineRef &engine)
Processes a new frame and updates or sets the texture of the texture atlases whenever necessary with ...
Indices32 deletedTriangleIds_
The reusable vector holding ids of deleted triangle.
Definition TextureGenerator.h:315
bool processFrameKeepRetired(Frame &&rgbFrame, const AnyCamera &anyCamera, const HomogenousMatrix4 &world_T_camera, const Rendering::EngineRef &engine)
Processes a new frame and updates or sets the texture of the texture atlases whenever necessary with ...
bool exportMesh(const Index32 meshId, Mesh &mesh, Frame &meshTexture)
Returns a current mesh.
TextureGenerator(const TexturingMode texturingMode=TM_REDRAW_RETIRED)
Creates a new texture generator.
Definition TextureGenerator.h:333
bool updateMesh(const Devices::SceneTracker6DOF::SharedSceneElement &sceneElement, const bool skipIfVertexNumberHasNotChanged)
Updates the generator's meshes with new meshes given as scene elements.
Rendering::TrianglesRef renderingTriangles_
The triangle object which will be used to render the triangles.
Definition TextureGenerator.h:321
DepthBufferRenderer depthBufferRenderer_
The renderer able to down-sample and to filter a depth buffer.
Definition TextureGenerator.h:288
Indices32 newTriangleIds_
The ids of all new triangles since the last update call.
Definition TextureGenerator.h:309
bool extractMeshesWithAtlasTextureCoordinates(const Index32 meshId, Mesh &mesh)
Extracts a mesh of this texture generator with texture coordinates associated with the texture atlas.
Indices32 meshIds() const
Returns the ids of the generated textured meshes.
bool isValid() const
Returns whether this generator holds at least one triangle.
Definition TextureGenerator.h:346
static constexpr Index32 invalidTriangleId()
Returns an invalid triangle id.
Definition TextureGenerator.h:351
This class implements a renderer rendering textured triangles into a texture atlas using a backup app...
Definition TexturedTrianglesRendererBackup.h:41
This class implements a renderer rendering textured triangles into a texture atlas using a geometry s...
Definition TexturedTrianglesRenderer.h:41
This class implements a renderer for triangles with individual color ids.
Definition TrianglesIdRenderer.h:38
This class implements a manager for active, textured, retired, and deleted triangles.
Definition TrianglesManagerRenderer.h:41
This class implements a renderer for all visible triangles.
Definition VisibleTrianglesRenderer.h:38
std::vector< Index32 > Indices32
Definition of a vector holding 32 bit index values.
Definition Base.h:96
uint32_t Index32
Definition of a 32 bit index value.
Definition Base.h:84
std::vector< Vector2 > Vectors2
Definition of a vector holding Vector2 objects.
Definition Vector2.h:64
std::vector< Vector3 > Vectors3
Definition of a vector holding Vector3 objects.
Definition Vector3.h:65
std::vector< TriangleFace > TriangleFaces
Definition of a vector holding triangle faces.
Definition TriangleFace.h:30
The namespace covering the entire Ocean framework.
Definition Accessor.h:15