3D Repo Bouncer  1.4
repo_model_export_gltf.h
1 
22 #pragma once
23 
24 #include <string>
25 
26 #include "repo_model_export_web.h"
27 #include "../../../lib/repo_property_tree.h"
28 #include "../../../core/model/collection/repo_scene.h"
29 
30 namespace repo{
31  namespace manipulator{
32  namespace modelconvertor{
34  {
35  public:
41 
45  virtual ~GLTFModelExport();
46 
53 
54  private:
55  std::unordered_map<std::string, std::vector<uint8_t>> fullDataBuffer;
56 
57  void addAccessors(
58  const std::string &accName,
59  const std::string &buffViewName,
61  const std::vector<uint16_t> &faces,
62  const uint32_t &addrFrom,
63  const uint32_t &addrTo,
64  const std::string &refId = std::string(),
65  const std::vector<uint16_t> &lod = std::vector<uint16_t>(),
66  const size_t &offset = 0);
67 
68  void addAccessors(
69  const std::string &accName,
70  const std::string &buffViewName,
72  const std::vector<float> &data,
73  const uint32_t &addrFrom,
74  const uint32_t &addrTo,
75  const std::string &refId,
76  const size_t &offset);
77 
78  void addAccessors(
79  const std::string &accName,
80  const std::string &buffViewName,
82  const std::vector<repo_vector2d_t> &buffer,
83  const uint32_t &addrFrom,
84  const uint32_t &addrTo,
85  const std::string &refId = std::string(),
86  const size_t &offset = 0);
87 
88  void addAccessors(
89  const std::string &accName,
90  const std::string &buffViewName,
92  const std::vector<repo_vector_t> &buffer,
93  const uint32_t &addrFrom,
94  const uint32_t &addrTo,
95  const std::string &refId = std::string(),
96  const size_t &offset = 0);
97 
111  void addAccessors(
112  const std::string &accName,
113  const std::string &buffViewName,
115  const size_t &count,
116  const size_t &offset,
117  const size_t &stride,
118  const uint32_t &componentType,
119  const std::string &bufferType,
120  const std::vector<float> &min,
121  const std::vector<float> &max,
122  const std::string &refId = std::string(),
123  const std::vector<uint16_t> &lod = std::vector<uint16_t>());
124 
134  void addBufferView(
135  const std::string &name,
136  const std::string &fileName,
138  const std::vector<uint16_t> &buffer,
139  const size_t &offset,
140  const size_t &count,
141  const std::string &refId = std::string()
142  );
143 
144  void addBufferView(
145  const std::string &name,
146  const std::string &fileName,
148  const std::vector<float> &buffer,
149  const size_t &offset,
150  const size_t &count,
151  const std::string &refId);
152 
153  void addBufferView(
154  const std::string &name,
155  const std::string &fileName,
157  const std::vector<repo_vector_t> &buffer,
158  const size_t &offset,
159  const size_t &count,
160  const std::string &refId = std::string()
161  );
162 
163  void addBufferView(
164  const std::string &name,
165  const std::string &fileName,
167  const std::vector<repo_vector2d_t> &buffer,
168  const size_t &offset,
169  const size_t &count,
170  const std::string &refId = std::string()
171  );
172 
182  void addBufferView(
183  const std::string &name,
184  const std::string &fileName,
186  const size_t &byteLength,
187  const size_t &offset,
188  const uint32_t &bufferTarget,
189  const std::string &refId = std::string()
190  );
191 
199  size_t addToDataBuffer(
200  const std::string &bufferName,
201  const uint8_t *buffer,
202  const size_t &byteLength
203  );
204 
205  template <typename T>
206  size_t addToDataBuffer(
207  const std::string &bufferName,
208  const std::vector<T> &buffer
209  )
210  {
211  return addToDataBuffer(bufferName, (uint8_t*)buffer.data(), buffer.size() * sizeof(T));
212  }
213 
219  bool constructScene(
221 
227  bool generateTreeRepresentation();
228 
233  repo::lib::PropertyTree generateSpatialPartitioning();
234 
239  std::unordered_map<std::string, std::vector<uint8_t>> getGLTFFilesAsBuffer() const;
240 
246  bool reIndexFaces(
247  const std::vector<std::vector<repo_mesh_mapping_t>> &matMap,
248  std::vector<uint16_t> &faces);
249 
256  void processNodeChildren(
257  const repo::core::model::RepoNode *node,
259  const std::unordered_map<repoUUID, uint32_t, RepoUUIDHasher> &subMeshCounts
260  );
261 
266  void populateWithCameras(
268 
273  void populateWithMaterials(
275 
279  std::unordered_map<repoUUID, uint32_t, RepoUUIDHasher>
280  populateWithMeshes(
282 
287  void populateWithTextures(
289 
294  void populateWithNodes(
296  const std::unordered_map<repoUUID, uint32_t, RepoUUIDHasher> &subMeshCounts);
297 
298  std::vector<std::vector<std::vector<uint16_t>>> reorderFaces(
299  std::vector<uint16_t> &faces,
300  const std::vector<repo_vector_t> &vertices,
301  const std::vector<std::vector<repo_mesh_mapping_t>> &mapping);
302 
310  std::vector<uint16_t> reorderFaces(
311  const std::vector<uint16_t> &faces,
312  const std::vector<repo_vector_t> &vertices,
313  const repo_mesh_mapping_t &mapping,
314  std::vector<uint16_t> &lods) const;
315 
316  std::vector<uint16_t> serialiseFaces(
317  const std::vector<repo_face_t> &faces) const;
318 
323  void writeBuffers(
325 
334  void writeDefaultSampler(
336  );
337 
346  void writeDefaultTechnique(
348  );
349  };
350  } //namespace modelconvertor
351  } //namespace manipulator
352 } //namespace repo
Definition: repo_connection_pool_mongo.h:32
Definition: repo_property_tree.h:29
Definition: repo_scene.h:44
Definition: repo_model_export_web.h:36
Definition: repo_model_export_gltf.h:33
Definition: repo_node_utils.h:81
Definition: repo_node.h:33
repo_web_buffers_t getAllFilesExportedAsBuffer() const
Definition: repo_model_export_gltf.cpp:556
virtual ~GLTFModelExport()
Definition: repo_model_export_gltf.cpp:207
Definition: repo_structs.h:25
GLTFModelExport(const repo::core::model::RepoScene *scene)
Definition: repo_model_export_gltf.cpp:191