libcootapi
 
Loading...
Searching...
No Matches
/opt/conda/conda-bld/coot-headless_1766554182969/work/api/instancing.hh
1#ifndef INSTANCING_HH
2#define INSTANCING_HH
3
4#include <vector>
5#include "coot-utils/vertex.hh"
6#include "coot-utils/g_triangle.hh"
7#include "coot-utils/simple-mesh.hh"
8
9namespace coot {
10
12 class instancing_data_type_A_t {
13 public:
14 glm::vec3 position;
15 glm::vec4 colour;
16 glm::vec3 size;
17 instancing_data_type_A_t(const glm::vec3 &position_in, const glm::vec4 &colour_in, const glm::vec3 &size_in) :
18 position(position_in), colour(colour_in), size(size_in) {}
19 instancing_data_type_A_t() {}
20 };
21
23 class instancing_data_type_B_t {
24 public:
25 glm::vec3 position; // origin offset
26 glm::vec4 colour;
27 glm::vec3 size;
29 glm::mat4 orientation; // 3 sets of vec3 in the shader. 20230114-PE not glm::mat4
30 instancing_data_type_B_t(const glm::vec3 &position_in, const glm::vec4 &colour_in, const glm::vec3 &size_in, const glm::mat4 &ori) :
31 position(position_in), colour(colour_in), size(size_in), orientation(ori) {}
33 };
34
36 class instanced_geometry_t {
37 public:
39 std::vector<api::vn_vertex> vertices;
41 std::vector<g_triangle> triangles;
42 std::string name;
43
44 instanced_geometry_t() {}
45 explicit instanced_geometry_t(const std::string &n) : name(n) {};
46 instanced_geometry_t(const std::vector<api::vn_vertex> &v, const std::vector<g_triangle> &t) :
47 vertices(v), triangles(t) {}
48 bool empty() { return instancing_data_A.empty() && instancing_data_B.empty(); }
49
51 std::vector<instancing_data_type_A_t> instancing_data_A;
53 std::vector<instancing_data_type_B_t> instancing_data_B;
54 };
55
58 class instanced_mesh_t {
59 public:
60 instanced_mesh_t() {};
61 std::vector<instanced_geometry_t> geom;
62 void add(const instanced_geometry_t &ig) { geom.push_back(ig); }
63
66
68 void clear() { geom.clear(); markup.clear(); }
69
70 void export_to_glTF(const std::string &file_name, bool use_binary_format) const;
71 };
72
73 // convert for export. A better exporter would preserve the instancing (but each ball colour
74 // would need it's own reference I think) - the instancing is the orientation matrix (only).
75 simple_mesh_t instanced_mesh_to_simple_mesh(const instanced_mesh_t &im);
76
77}
78
79#endif // INSTANCING_HH
instancing container for vertices, triangles and instancing data
Definition instancing.hh:36
std::vector< api::vn_vertex > vertices
vertices (containing positions and normals)
Definition instancing.hh:39
std::vector< g_triangle > triangles
triangle indices
Definition instancing.hh:41
std::vector< instancing_data_type_B_t > instancing_data_B
a vector of type B instancing
Definition instancing.hh:53
std::vector< instancing_data_type_A_t > instancing_data_A
a vector of type A instancing
Definition instancing.hh:51
void clear()
clear
Definition instancing.hh:68
simple_mesh_t markup
cis-peptide markup can't be drawn instanced
Definition instancing.hh:65
class for B type instancing data - this does contain an orientation matrix
Definition instancing.hh:23
glm::mat4 orientation
the orientation matrix rotates the vector away from "z is up"
Definition instancing.hh:29
The basic mesh for transfering mesh geometry and colours.
Definition simple-mesh.hh:38