a deriver pour creer les objets openGL.
26 m_framebuffer_width= 512;
27 m_framebuffer_height= 512;
30 glGenTextures(1, &m_color_buffer);
31 glBindTexture(GL_TEXTURE_2D, m_color_buffer);
33 glTexImage2D(GL_TEXTURE_2D, 0,
34 GL_RGBA, m_framebuffer_width, m_framebuffer_height, 0,
35 GL_RGBA, GL_UNSIGNED_BYTE,
nullptr);
38 glGenerateMipmap(GL_TEXTURE_2D);
41 glGenTextures(1, &m_depth_buffer);
42 glBindTexture(GL_TEXTURE_2D, m_depth_buffer);
44 glTexImage2D(GL_TEXTURE_2D, 0,
45 GL_DEPTH_COMPONENT, m_framebuffer_width, m_framebuffer_height, 0,
46 GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
nullptr);
49 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
52 glGenFramebuffers(1, &m_framebuffer);
53 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebuffer);
54 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_color_buffer, 0);
55 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_depth_buffer, 0);
57 GLenum buffers[]= { GL_COLOR_ATTACHMENT0 };
58 glDrawBuffers(1, buffers);
61 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
69 m_camera.
lookat(pmin, pmax);
70 m_framebuffer_camera.
lookat(pmin, pmax);
74 m_color_texture=
read_texture(0,
"data/debug2x2red.png");
77 glGenVertexArrays(1, &m_vao);
78 glBindVertexArray(m_vao);
81 glGenBuffers(1, &m_buffer);
82 glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
85 glBufferData(GL_ARRAY_BUFFER, size,
nullptr, GL_STATIC_DRAW);
90 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
vertex_buffer());
92 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (
const GLvoid *) offset);
93 glEnableVertexAttribArray(0);
96 offset= offset + size;
100 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (
const GLvoid *) offset);
101 glEnableVertexAttribArray(1);
104 offset= offset + size;
106 glBufferSubData(GL_ARRAY_BUFFER, offset, size, mesh.
normal_buffer());
108 glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, (
const GLvoid *) offset);
109 glEnableVertexAttribArray(2);
113 glBindVertexArray(0);
114 glBindBuffer(GL_ARRAY_BUFFER, 0);
117 m_texture_program=
read_program(
"tutos/texcoords.glsl");
121 glClearColor(0.2f, 0.2f, 0.2f, 1.f);
124 glDepthFunc(GL_LESS);
125 glEnable(GL_DEPTH_TEST);
const float * normal_buffer() const
renvoie l'adresse de la normale du premier sommet. par convention, la normale est un vec3...
const float * vertex_buffer() const
renvoie l'adresse de la position du premier sommet. permet de construire les vertex buffers openGL...
void bounds(Point &pmin, Point &pmax)
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
std::size_t normal_buffer_size() const
renvoie la longueur (en octets) du normal buffer.
representation d'un objet / maillage.
std::size_t vertex_buffer_size() const
renvoie la longueur (en octets) du vertex buffer.
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
const float * texcoord_buffer() const
renvoie l'adresse des coordonnees de textures du premier sommet. par convention, c'est un vec2...
void release()
detruit les objets openGL.
int program_print_errors(const GLuint program)
affiche les erreurs de compilation.
void lookat(const Point ¢er, const float size)
observe le point center a une distance size.
GLuint read_program(const char *filename, const char *definitions)
std::size_t texcoord_buffer_size() const
renvoie la taille (en octets) du texcoord buffer.
representation d'un point 3d.
int vertex_count() const
renvoie le nombre de sommets.
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes. utiliser glDrawArrays pour l'afficher. a detruire avec Mesh::release( ).