Molecular Vis
Improving perception of molecular visualization
Geometry.h
1 #pragma once
2 #include <vector>
3 #include <memory>
4 #include <glm/ext.hpp>
5 #include <GL/glew.h>
6 
7 #include "../Material/Material.h"
8 
13 struct Vertex {
14  //Vertex data
15  glm::vec3 positions;
16  glm::vec3 normals;
17  glm::vec2 uv;
18 };
19 
24 struct GeometryData {
25  //Vertex data
26 
28  std::vector<glm::vec3> positions;
29 
31  std::vector<glm::vec3> normals;
32 
34  std::vector<glm::vec2> uv;
35 
36  //Indices
38  std::vector<unsigned int> indices;
39 };
40 
45 class Geometry
46 {
47 protected:
49  glm::mat4 modelMatrix;
50 public:
56  virtual void draw(glm::mat4 matrix = glm::mat4(1.0f))=0;
57  virtual ~Geometry();
58 };
59 
65 {
66 public:
74  ProceduralGeometry(glm::mat4 modelMatrix, GeometryData& geometryData, std::shared_ptr<Material> material);
82  ProceduralGeometry(glm::mat4 modelMatrix, GeometryData& geometryData, std::shared_ptr<Shader> shader);
83  virtual ~ProceduralGeometry();
84 
90  virtual void draw(glm::mat4 matrix = glm::mat4(1.0f));
91 
92 
93 
94  //Construction helper
101  static GeometryData createCubeGeometry(float width, float height, float depth);
110  static GeometryData createSphereGeometry(float radius, unsigned int longitudeSegments, unsigned int latitudeSegments);
120  static void createSphereGeometry(float radius, unsigned int longitudeSegments, unsigned int latitudeSegments, glm::vec3 position, GeometryData& geometry);
121 
130  static GeometryData createCylinderGeometry(float radius, float height, unsigned int segments);
131 
138 
139 private:
140  bool isEmpty = true;
141  //Buffers
142  GLuint vao;
143 
144  GLuint vboPositions;
145  GLuint vboNormals;
146  GLuint vboUV;
147  GLuint vboIndices;
148 
149  //nrOfVertices
150  int nrOfVertices;
151 
152  //Matrices
153  glm::mat4 modelMatrix;
154 
155  //Shader and Material stuff like color
156  std::shared_ptr<Material> material;
157  glm::vec3 color;
158 };
159 
Class for procedurally genereted geometries, like spheres and cubes.
Definition: Geometry.h:64
glm::vec2 uv
Definition: Geometry.h:17
static GeometryData createSphereGeometry(float radius, unsigned int longitudeSegments, unsigned int latitudeSegments)
Definition: ProceduralGeometry.cpp:234
glm::vec3 normals
Definition: Geometry.h:16
std::vector< glm::vec3 > normals
Definition: Geometry.h:31
ProceduralGeometry(glm::mat4 modelMatrix, GeometryData &geometryData, std::shared_ptr< Material > material)
Definition: ProceduralGeometry.cpp:3
glm::mat4 modelMatrix
Definition: Geometry.h:49
std::vector< unsigned int > indices
Definition: Geometry.h:38
static GeometryData createCubeGeometry(float width, float height, float depth)
Definition: ProceduralGeometry.cpp:84
std::vector< glm::vec2 > uv
Definition: Geometry.h:34
Base class for Geometry classes.
Definition: Geometry.h:45
virtual void draw(glm::mat4 matrix=glm::mat4(1.0f))=0
std::vector< glm::vec3 > positions
Definition: Geometry.h:28
Struct for Vertex Data.
Definition: Geometry.h:13
virtual void draw(glm::mat4 matrix=glm::mat4(1.0f))
Definition: ProceduralGeometry.cpp:67
static GeometryData createCylinderGeometry(float radius, float height, unsigned int segments)
Definition: ProceduralGeometry.cpp:351
static GeometryData createFullScreenQuad()
Definition: ProceduralGeometry.cpp:415
Stuct holding the vertices and indeces of the Geometry.
Definition: Geometry.h:24