gKit2 light
Loading...
Searching...
No Matches
DrawInstanceID Class Reference
Inheritance diagram for DrawInstanceID:

Public Member Functions

int init ()
 a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
int quit ()
 a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
int update (const float time, const float delta)
 a deriver et redefinir pour animer les objets en fonction du temps.
int render ()
 a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
Public Member Functions inherited from App
 App (const int width, const int height, const int major=3, const int minor=3)
 constructeur, dimensions de la fenetre et version d'openGL.
int run ()
 execution de l'application.

Protected Attributes

Transform m_model
Orbiter m_camera
GLuint m_vao
GLuint m_buffer
GLuint m_program
int m_vertex_count
Protected Attributes inherited from App
Window m_window
Context m_context
bool sync

Additional Inherited Members

Protected Member Functions inherited from App
virtual int prerender ()
virtual int postrender ()
void vsync_off ()

Detailed Description

Definition at line 17 of file tuto6GL.cpp.

Constructor & Destructor Documentation

◆ DrawInstanceID()

DrawInstanceID::DrawInstanceID ( )
inline

Definition at line 21 of file tuto6GL.cpp.

21: App(1024, 640) {}
App(const int width, const int height, const int major=3, const int minor=3)
constructeur, dimensions de la fenetre et version d'openGL.
Definition app.cpp:11

Member Function Documentation

◆ init()

int DrawInstanceID::init ( )
inlinevirtual

a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.

Implements App.

Definition at line 23 of file tuto6GL.cpp.

24 {
25 // charge un mesh
26 Mesh mesh= read_mesh("data/cube.obj");
27 if(mesh.vertex_count() ==0)
28 return -1;
29
30 Point pmin, pmax;
31 mesh.bounds(pmin, pmax);
32 m_camera.lookat(pmin - Vector(40, 0, 0), pmax + Vector(40, 0, 0));
33
34 m_vertex_count= mesh.vertex_count();
35
36 // cree les buffers et le vao
37 glGenVertexArrays(1, &m_vao);
38 glBindVertexArray(m_vao);
39
40 // buffer : positions + normals
41 glGenBuffers(1, &m_buffer);
42 glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
43
44 size_t size= mesh.vertex_buffer_size() + mesh.normal_buffer_size();
45 glBufferData(GL_ARRAY_BUFFER, size, nullptr, GL_STATIC_DRAW);
46
47 // transfere les positions des sommets
48 size_t offset= 0;
49 size= mesh.vertex_buffer_size();
50 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.vertex_buffer());
51 // configure l'attribut 0, vec3 position
52 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, /* stride */ 0, (const GLvoid *) offset);
53 glEnableVertexAttribArray(0);
54
55 // transfere les normales des sommets
56 offset= offset + size;
57 size= mesh.normal_buffer_size();
58 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.normal_buffer());
59 // configure l'attribut 2, vec3 normal
60 glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, /* stride */ 0, (const GLvoid *) offset);
61 glEnableVertexAttribArray(2);
62
63 //
64 mesh.release();
65 glBindVertexArray(0);
66 glBindBuffer(GL_ARRAY_BUFFER, 0);
67
68 // shaders
69 m_program= read_program("gkit2_tutos/instanceID.glsl");
70 program_print_errors(m_program);
71
72 // etat openGL par defaut
73 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
74
75 glClearDepth(1.f); // profondeur par defaut
76 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
77 glEnable(GL_DEPTH_TEST); // activer le ztest
78
79 return 0; // ras, pas d'erreur
80 }
const float * vertex_buffer() const
renvoie l'adresse de la position du premier sommet. permet de construire les vertex buffers openGL....
Definition mesh.h:305
void bounds(Point &pmin, Point &pmax) const
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
Definition mesh.cpp:489
std::size_t vertex_buffer_size() const
renvoie la longueur (en octets) du vertex buffer.
Definition mesh.h:307
int vertex_count() const
renvoie le nombre de sommets.
Definition mesh.h:300
void release()
detruit les objets openGL.
Definition mesh.cpp:50
const float * normal_buffer() const
renvoie l'adresse de la normale du premier sommet. par convention, la normale est un vec3,...
Definition mesh.h:310
std::size_t normal_buffer_size() const
renvoie la longueur (en octets) du normal buffer.
Definition mesh.h:312
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
Definition wavefront.cpp:14
GLuint read_program(const char *filename, const char *definitions)
Definition program.cpp:217
int program_print_errors(const GLuint program, const char *filename)
affiche les erreurs de compilation.
Definition program.cpp:461

◆ quit()

int DrawInstanceID::quit ( )
inlinevirtual

a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.

Implements App.

Definition at line 83 of file tuto6GL.cpp.

84 {
85 release_program(m_program);
86 glDeleteVertexArrays(1, &m_vao);
87 glDeleteBuffers(1, &m_buffer);
88 return 0;
89 }
int release_program(const GLuint program)
detruit les shaders et le program.
Definition program.cpp:240

◆ update()

int DrawInstanceID::update ( const float time,
const float delta )
inlinevirtual

a deriver et redefinir pour animer les objets en fonction du temps.

Reimplemented from App.

Definition at line 91 of file tuto6GL.cpp.

92 {
93 m_model= RotationY(time / 20);
94 return 0;
95 }
Transform RotationY(const float a)
renvoie la matrice representation une rotation de a degree autour de l'axe Y.
Definition mat.cpp:242

◆ render()

int DrawInstanceID::render ( )
inlinevirtual

a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.

Implements App.

Definition at line 98 of file tuto6GL.cpp.

99 {
100 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
101
102 // deplace la camera
103 int mx, my;
104 unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
105 if(mb & SDL_BUTTON(1)) // le bouton gauche est enfonce
106 m_camera.rotation(mx, my);
107 else if(mb & SDL_BUTTON(3)) // le bouton droit est enfonce
108 m_camera.move(mx);
109 else if(mb & SDL_BUTTON(2)) // le bouton du milieu est enfonce
110 m_camera.translation((float) mx / (float) window_width(), (float) my / (float) window_height());
111
112 glBindVertexArray(m_vao);
113 glUseProgram(m_program);
114
115 Transform m= m_model;
116 Transform v= m_camera.view();
117 Transform p= m_camera.projection(window_width(), window_height(), 45);
118 Transform mvp= p * v * m;
119 Transform mv= v * m;
120
121 program_uniform(m_program, "mvpMatrix", mvp);
122 program_uniform(m_program, "normalMatrix", mv.normal());
123
124 glDrawArraysInstanced(GL_TRIANGLES, 0, m_vertex_count, 10);
125
126 return 1;
127 }
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition window.cpp:27
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition window.cpp:23
Transform normal() const
renvoie la transformation a appliquer aux normales d'un objet transforme par la matrice m.
Definition mat.cpp:181

Member Data Documentation

◆ m_model

Transform DrawInstanceID::m_model
protected

Definition at line 130 of file tuto6GL.cpp.

◆ m_camera

Orbiter DrawInstanceID::m_camera
protected

Definition at line 131 of file tuto6GL.cpp.

◆ m_vao

GLuint DrawInstanceID::m_vao
protected

Definition at line 132 of file tuto6GL.cpp.

◆ m_buffer

GLuint DrawInstanceID::m_buffer
protected

Definition at line 133 of file tuto6GL.cpp.

◆ m_program

GLuint DrawInstanceID::m_program
protected

Definition at line 134 of file tuto6GL.cpp.

◆ m_vertex_count

int DrawInstanceID::m_vertex_count
protected

Definition at line 135 of file tuto6GL.cpp.


The documentation for this class was generated from the following file: