Repository navigation
Expand file tree
/
Copy pathMesh.cpp
More file actions
63 lines (53 loc) · 1.56 KB
/
Copy pathMesh.cpp
File metadata and controls
63 lines (53 loc) · 1.56 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
#include "Mesh.h"
Mesh::Mesh()
{
}
Mesh::~Mesh()
{
}
Mesh::Mesh(std::vector<glm::vec3> vertexs, std::vector<glm::vec3> normals, std::vector<glm::vec2> uvs)
{
this->vertexs = vertexs;
this->normals = normals;
this->uvs = uvs;
InitMesh();
}
GLsizei Mesh::Size()
{
return this->vertexs.size() * sizeof(glm::vec3);
}
void Mesh::InitMesh()
{
glGenVertexArrays(1, &this->VAO);
glBindVertexArray(this->VAO);
GLuint vbuffer;
glGenBuffers(1, &vbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
glBufferData(GL_ARRAY_BUFFER, this->vertexs.size() * sizeof(glm::vec3), &this->vertexs[0], GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GL_FLOAT), (void*)0);
glEnableVertexAttribArray(0);
if (!this->normals.empty())
{
GLuint nbuffer;
glGenBuffers(1, &nbuffer);
glBindBuffer(GL_ARRAY_BUFFER, nbuffer);
glBufferData(GL_ARRAY_BUFFER, this->normals.size() * sizeof(glm::vec3), &this->normals[0], GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GL_FLOAT), (void*)0);
glEnableVertexAttribArray(1);
}
if (!this->uvs.empty())
{
GLuint uvbuffer;
glGenBuffers(1, &uvbuffer);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glBufferData(GL_ARRAY_BUFFER, this->uvs.size() * sizeof(glm::vec2), &this->uvs[0], GL_STATIC_DRAW);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GL_FLOAT), (void*)0);
glEnableVertexAttribArray(2);
}
}
void Mesh::Render()
{
glBindVertexArray(this->VAO);
glDrawArrays(GL_TRIANGLES, 0, Size());
glBindVertexArray(0);
}