-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCameraObject.cpp
More file actions
80 lines (50 loc) · 1.89 KB
/
CameraObject.cpp
File metadata and controls
80 lines (50 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "CameraObject.h"
#include <QVector3D>
#include <QOpenGLShaderProgram>
CameraObject::CameraObject()
:mVBO(QOpenGLBuffer::VertexBuffer),
mEBO(QOpenGLBuffer::IndexBuffer){
CameraMesh c;
Transform3D trans;
trans.setTranslation(0, 1, 0);
c.transform(trans.toMatrix());
cameras.push_back(c);
Vertex * vertexBuffer = mVertexBufferData.data();
unsigned int vertexCount = 0;
GLuint * elementBuffer = mElementBufferData.data();
c.copy2Buffer(vertexBuffer, elementBuffer, vertexCount);
}
void CameraObject::create(QOpenGLShaderProgram *shaderProgramm) {
mVAO.create();
mVAO.bind();
mVBO.create();
mVBO.bind();
mVBO.setUsagePattern(QOpenGLBuffer::StaticDraw);
int vertexMemSize = mVertexBufferData.size()*sizeof(Vertex);
qDebug() << "BoxObject - VertexBuffer size =" << vertexMemSize/1024.0 << "kByte";
mVBO.allocate(mVertexBufferData.data(), vertexMemSize);
mEBO.create();
mEBO.bind();
mEBO.setUsagePattern(QOpenGLBuffer::StaticDraw);
int elementMemSize = mElementBufferData.size()*sizeof(GLuint);
qDebug() << "BoxObject - ElementBuffer size =" << elementMemSize/1024.0 << "kByte";
mEBO.allocate(mElementBufferData.data(), elementMemSize);
shaderProgramm->enableAttributeArray(0); // array with index/id 0
shaderProgramm->setAttributeBuffer(0, GL_FLOAT, 0, 3, sizeof(Vertex));
shaderProgramm->enableAttributeArray(1); // array with index/id 1
shaderProgramm->setAttributeBuffer(1, GL_FLOAT, offsetof(Vertex, r), 3, sizeof(Vertex));
mVAO.release();
mVBO.release();
mEBO.release();
}
void CameraObject::destroy(){
mVAO.destroy();
mVBO.destroy();
mEBO.destroy();
}
void CameraObject::render() {
mVAO.bind();
glPolygonMode(GL_FRONT_AND_BACK, GL_LINES);
glDrawElements(GL_TRIANGLES, mElementBufferData.size(), GL_UNSIGNED_INT, nullptr);
mVAO.release();
}