-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModel.h
More file actions
92 lines (73 loc) · 1.93 KB
/
Model.h
File metadata and controls
92 lines (73 loc) · 1.93 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
#pragma once
#include "config.h"
#include "AABB.h"
class Model
{
public:
Shader* shader;
Transform transform;
float MaxSize;
std::string path;
glm::vec3 localMin;
glm::vec3 localMax;
AABB aabb;
Model(std::string path, Shader* shader):path(path),shader(shader){}
virtual void UpdateTransform()
{
transform.UpdateMatrix();
aabb.min = transform.mat * glm::vec4(localMin, 1);
aabb.max = transform.mat * glm::vec4(localMax, 1);
}
void DrawAABB()
{
extern Camera* camera;
extern bool DebugAABB;
if (!DebugAABB)return;
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf((float*)&camera->projection);
glm::mat4 ModelView = camera->view;
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf((float*)&ModelView);
glColor3f(0, 1, 1);
glLineWidth(1);
glm::vec3& min = aabb.min;
glm::vec3& max = aabb.max;
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_QUADS);
// Front face
glVertex3f(min.x, min.y, min.z);
glVertex3f(max.x, min.y, min.z);
glVertex3f(max.x, max.y, min.z);
glVertex3f(min.x, max.y, min.z);
// Back face
glVertex3f(min.x, min.y, max.z);
glVertex3f(max.x, min.y, max.z);
glVertex3f(max.x, max.y, max.z);
glVertex3f(min.x, max.y, max.z);
// Top face
glVertex3f(min.x, max.y, min.z);
glVertex3f(max.x, max.y, min.z);
glVertex3f(max.x, max.y, max.z);
glVertex3f(min.x, max.y, max.z);
// Bottom face
glVertex3f(min.x, min.y, min.z);
glVertex3f(max.x, min.y, min.z);
glVertex3f(max.x, min.y, max.z);
glVertex3f(min.x, min.y, max.z);
// Left face
glVertex3f(min.x, min.y, min.z);
glVertex3f(min.x, max.y, min.z);
glVertex3f(min.x, max.y, max.z);
glVertex3f(min.x, min.y, max.z);
// Right face
glVertex3f(max.x, min.y, min.z);
glVertex3f(max.x, max.y, min.z);
glVertex3f(max.x, max.y, max.z);
glVertex3f(max.x, min.y, max.z);
glEnd();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
}
virtual ~Model() {} // need
};