-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModel.h
More file actions
108 lines (92 loc) · 2.14 KB
/
Copy pathModel.h
File metadata and controls
108 lines (92 loc) · 2.14 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#pragma once
class Model
{
private:
Material* material;
Texture* overrideTextureDiffuse;
Texture* overrideTextureSpecular;
std::vector<Mesh*> meshes;
glm::vec3 position;
public:
Model(
glm::vec3 position,
Material* material,
Texture* orTexDif,
Texture* orTexSpec,
std::vector<Mesh*>& meshes
)
{
this->position = position;
this->material = material;
this->overrideTextureDiffuse = orTexDif;
this->overrideTextureSpecular = orTexSpec;
for (auto* i : meshes)
{
this->meshes.push_back(new Mesh(*i));
}
for (auto& i : this->meshes)
{
i->move(this->position);
i->setOrigin(this->position);
}
}
// OBJ file loaded model
Model(
glm::vec3 position,
glm::vec3 scale,
Material* material,
Texture* orTexDif,
Texture* orTexSpec,
const char* objFile
)
{
this->position = position;
this->material = material;
this->overrideTextureDiffuse = orTexDif;
this->overrideTextureSpecular = orTexSpec;
std::pair<std::vector<Vertex>, std::vector<Vertex>> msh = loadOBJ(objFile);
std::vector<Vertex> mesh_quad = msh.first;
std::vector<Vertex> mesh_triangle = msh.second;
this->meshes.push_back(new Mesh(mesh_quad.data(), mesh_quad.size(), NULL, 0, glm::vec3(1.f, 0.f, 0.f),
glm::vec3(0.f),
glm::vec3(0.f),
scale));
this->meshes.push_back(new Mesh(mesh_triangle.data(), mesh_triangle.size(), NULL, 0, glm::vec3(1.f, 0.f, 0.f),
glm::vec3(0.f),
glm::vec3(0.f),
scale, 2));
for (auto& i : this->meshes)
{
i->move(this->position);
i->setOrigin(this->position);
}
}
~Model()
{
for (auto*& i : this->meshes)
delete i;
}
//Functions
void rotate(const glm::vec3 rotation)
{
for (auto& i : this->meshes)
i->rotate(rotation);
}
void render(GLuint ProgramId)
{
// Update the uniforms
//this->updateUniforms();
// Update uniforms
this->material->sendToShader(ProgramId);
// Use a program (LAST UNIFORM UPDATE UNUSES IT)
glUseProgram(ProgramId);
// Draw
for (auto& i : this->meshes)
{
// Activate texture for each mesh
this->overrideTextureDiffuse->bind(0);
this->overrideTextureSpecular->bind(1);
i->render(ProgramId); // Activates shader also
}
}
};