gKit2 light
Toggle main menu visibility
Loading...
Searching...
No Matches
gkit2_tutos
tuto9_buffers.cpp
Go to the documentation of this file.
1
3
4
#include "
mat.h
"
5
#include "
mesh.h
"
6
#include "
wavefront.h
"
7
8
#include "
orbiter.h
"
9
#include "
program.h
"
10
#include "
uniforms.h
"
11
#include "
draw.h
"
12
13
#include "
app.h
"
// classe Application a deriver
14
#include "
app_camera.h
"
// gestion camera
15
16
17
struct
Buffers
18
{
19
GLuint vao;
20
GLuint vertex_buffer;
21
int
vertex_count;
22
23
Buffers( ) : vao(0), vertex_buffer(0), vertex_count(0) {}
24
25
void
create(
const
Mesh
& mesh )
26
{
27
if
(!mesh.vertex_buffer_size())
return
;
28
29
// cree et configure le vertex array object: conserve la description des attributs de sommets
30
glGenVertexArrays(1, &vao);
31
glBindVertexArray(vao);
32
33
// cree et initialise le buffer: conserve la positions des sommets
34
glGenBuffers(1, &vertex_buffer);
35
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
36
glBufferData(GL_ARRAY_BUFFER, mesh.vertex_buffer_size(), mesh.vertex_buffer(), GL_STATIC_DRAW);
37
38
// attribut 0, position des sommets, declare dans le vertex shader : in vec3 position;
39
glVertexAttribPointer(0,
40
3, GL_FLOAT,
// size et type, position est un vec3 dans le vertex shader
41
GL_FALSE,
// pas de normalisation des valeurs
42
0,
// stride 0, les valeurs sont les unes a la suite des autres
43
0
// offset 0, les valeurs sont au debut du buffer
44
);
45
glEnableVertexAttribArray(0);
46
// attention : le vertex array selectionne est un parametre implicite
47
// attention : le buffer selectionne sur GL_ARRAY_BUFFER est un parametre implicite
48
49
// conserve le nombre de sommets
50
vertex_count= mesh.vertex_count();
51
}
52
53
void
release( )
54
{
55
glDeleteBuffers(1, &vertex_buffer);
56
glDeleteVertexArrays(1, &vao);
57
}
58
};
59
60
61
class
TP
:
public
App
62
{
63
public
:
64
// constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
65
TP
( ) :
App
(1024, 640) {}
66
67
int
init
( )
68
{
69
// charger un objet a afficher
70
Mesh
mesh=
read_mesh
(
"data/cube.obj"
);
71
if
(!mesh.vertex_count())
return
-1;
72
73
// etape 1 : creer le vertex buffer et le vao
74
m_objet.create(mesh);
75
76
// etape 2 : configurer la camera
77
Point
pmin, pmax;
78
mesh.bounds(pmin, pmax);
79
m_camera.lookat(pmin, pmax);
80
81
// etape 3 : creer le shader program
82
m_program=
read_program
(
"gkit2_tutos/tuto9_color.glsl"
);
83
program_print_errors
(m_program);
84
85
// etat openGL par defaut
86
glClearColor(0.2f, 0.2f, 0.2f, 1.f);
// couleur par defaut de la fenetre
87
88
glClearDepth(1.f);
// profondeur par defaut
89
glDepthFunc(GL_LESS);
// ztest, conserver l'intersection la plus proche de la camera
90
glEnable(GL_DEPTH_TEST);
// activer le ztest
91
92
return
0;
// ras, pas d'erreur
93
}
94
95
// destruction des objets de l'application
96
int
quit
( )
97
{
98
// etape 4 : detruire le shader program
99
release_program
(m_program);
100
m_objet.release();
101
return
0;
102
}
103
104
// dessiner une nouvelle image
105
int
render
( )
106
{
107
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
108
109
// gestion mouvements camera
110
update_camera( m_camera );
111
112
// etape 2 : dessiner m_objet avec le shader program
113
114
// . recuperer les transformations
115
Transform
model=
RotationX
(
global_time
() / 20);
116
Transform
view= m_camera.view();
117
Transform
projection= m_camera.projection(
window_width
(),
window_height
(), 45);
118
119
// . composer les transformations : model, view et projection
120
Transform
mvp= projection * view * model;
121
122
// configurer le shader program
123
int
location;
124
glUseProgram(m_program);
125
126
// . transformation : la matrice declaree dans le vertex shader s'appelle mvpMatrix
127
location= glGetUniformLocation(m_program,
"mvpMatrix"
);
128
glUniformMatrix4fv(location, 1, GL_TRUE, mvp.
data
());
129
130
// . parametres "supplementaires" :
131
// . couleur des pixels, cf la declaration 'uniform vec4 color;' dans le fragment shader
132
location= glGetUniformLocation(m_program,
"color"
);
133
glUniform4f(location, 1, 1, 0, 1);
134
135
// go !
136
// selectionner les attributs et les buffers de l'objet
137
glBindVertexArray(m_objet.vao);
138
139
// dessiner les triangles de l'objet
140
glDrawArrays(GL_TRIANGLES, 0, m_objet.vertex_count);
141
142
return
1;
143
}
144
145
protected
:
146
Transform
m_model;
147
Buffers
m_objet;
148
Orbiter
m_camera;
149
GLuint m_texture;
150
GLuint m_program;
151
};
152
153
154
int
main(
int
argc,
char
**argv )
155
{
156
TP
tp;
157
tp.
run
();
158
159
return
0;
160
}
app.h
app_camera.h
App
classe application.
Definition
app.h:20
App::run
int run()
execution de l'application.
Definition
app.cpp:36
Mesh
representation d'un objet / maillage.
Definition
mesh.h:121
Orbiter
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
Definition
orbiter.h:17
TP
Definition
alpha.cpp:58
TP::render
int render()
a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
Definition
tuto9_buffers.cpp:105
TP::quit
int quit()
a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition
tuto9_buffers.cpp:96
TP::init
int init()
a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition
tuto9_buffers.cpp:67
draw.h
window_height
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition
window.cpp:27
window_width
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition
window.cpp:23
global_time
float global_time()
renvoie le temps ecoule depuis le lancement de l'application, en millisecondes.
Definition
window.cpp:139
RotationX
Transform RotationX(const float a)
renvoie la matrice representation une rotation de angle degree autour de l'axe X.
Definition
mat.cpp:230
read_mesh
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
Definition
wavefront.cpp:14
read_program
GLuint read_program(const char *filename, const char *definitions)
Definition
program.cpp:217
program_print_errors
int program_print_errors(const GLuint program, const char *filename)
affiche les erreurs de compilation.
Definition
program.cpp:461
release_program
int release_program(const GLuint program)
detruit les shaders et le program.
Definition
program.cpp:240
mat.h
mesh.h
orbiter.h
program.h
Buffers
Definition
tuto9_buffers.cpp:18
Point
representation d'un point 3d.
Definition
vec.h:21
Transform
representation d'une transformation, une matrice 4x4, organisee par ligne / row major.
Definition
mat.h:21
Transform::data
const float * data() const
renvoie l'adresse de la premiere valeur de la matrice.
Definition
mat.h:75
uniforms.h
wavefront.h
Generated on
for gKit2 light by
1.17.0