Terminus
geometry.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <vector>
5 
6 #include <QOpenGLVertexArrayObject>
7 #include <QOpenGLBuffer>
8 #include <QOpenGLFunctions>
9 #include <QVector3D>
10 
11 #include "indextriple.h"
12 #include "program.h"
13 
14 namespace terminus
15 {
16 
20 struct Vertex{
21  GLfloat position[3];
22  GLfloat texCoord[3];
23  GLfloat normal[3];
24 };
25 
31 class Geometry
32 {
33 
34 public:
43  Geometry(const std::vector<unsigned short> & indexBuffer, const std::vector<Vertex> & vertexBuffer);
44  Geometry(const std::vector<unsigned short> & indexBuffer, const std::vector<Vertex> & vertexBuffer, const QVector3D & minBBox, const QVector3D & maxBBox);
45  virtual ~Geometry();
46 
47  virtual const QVector3D & bBoxMin() const;
48  virtual const QVector3D & bBoxMax() const;
49 
54  virtual void setAttributes(Program & program);
55 
60  virtual void draw(QOpenGLFunctions & gl) const;
61 
62 protected:
63  virtual void calculateBBox();
64  virtual void allocate() const;
65  virtual void deallocate() const;
66 
67  mutable bool m_isOnGPU;
68  mutable QOpenGLBuffer *m_vbo;
69  mutable QOpenGLBuffer *m_ibo;
70 
71  unsigned int m_elementCount;
72 
73  std::vector<Vertex> m_vertexBuffer;
74  std::vector<unsigned short> m_indexBuffer;
75  QVector3D m_bBoxMin;
76  QVector3D m_bBoxMax;
77 };
78 
79 } //terminus
bool m_isOnGPU
Definition: geometry.h:67
Geometry(const std::vector< unsigned short > &indexBuffer, const std::vector< Vertex > &vertexBuffer)
General geometry constructor.
Definition: geometry.cpp:13
QVector3D m_bBoxMax
Definition: geometry.h:76
virtual void setAttributes(Program &program)
The geometry specific attributes position, texture coordinate and normal vector are set on the used p...
Definition: geometry.cpp:107
QOpenGLBuffer * m_ibo
Definition: geometry.h:69
The struct wraps the important vertex data attributes position, texture coordinate and normal vector...
Definition: geometry.h:20
virtual void allocate() const
Definition: geometry.cpp:54
virtual const QVector3D & bBoxMin() const
Definition: geometry.cpp:97
GLfloat position[3]
Definition: geometry.h:21
std::vector< Vertex > m_vertexBuffer
Definition: geometry.h:73
virtual void deallocate() const
Definition: geometry.cpp:77
QVector3D m_bBoxMin
Definition: geometry.h:75
The program class implements the basic functionality used for binding programs to openGL...
Definition: program.h:18
unsigned int m_elementCount
Definition: geometry.h:71
QOpenGLBuffer * m_vbo
Definition: geometry.h:68
GLfloat texCoord[3]
Definition: geometry.h:22
virtual ~Geometry()
Definition: geometry.cpp:36
Definition: eventhandler.cpp:18
virtual void calculateBBox()
Definition: geometry.cpp:41
The Geometry class wraps the vertices data of one drawable object.
Definition: geometry.h:31
std::vector< unsigned short > m_indexBuffer
Definition: geometry.h:74
virtual void draw(QOpenGLFunctions &gl) const
By invoking the draw function, both index and vertex buffer are going to be bound and the geometry wi...
Definition: geometry.cpp:114
GLfloat normal[3]
Definition: geometry.h:23
virtual const QVector3D & bBoxMax() const
Definition: geometry.cpp:102