27 unsigned int vertex_count;
49 glGenBuffers(1, &vertex_buffer);
50 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
53 glBufferData(GL_ARRAY_BUFFER,
60 glGenBuffers(1, &normal_buffer);
61 glBindBuffer(GL_ARRAY_BUFFER, normal_buffer);
68 glGenVertexArrays(1, &vao);
69 glBindVertexArray(vao);
72 GLint attribute= glGetAttribLocation(program,
"position");
77 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
79 glVertexAttribPointer(attribute, 3, GL_FLOAT, GL_FALSE, 0, 0);
80 glEnableVertexAttribArray(attribute);
83 attribute= glGetAttribLocation(program,
"normal");
88 glBindBuffer(GL_ARRAY_BUFFER, normal_buffer);
89 glVertexAttribPointer(attribute, 3, GL_FLOAT, GL_FALSE, 0, 0);
90 glEnableVertexAttribArray(attribute);
125 glBindVertexArray(0);
126 glBindBuffer(GL_ARRAY_BUFFER, 0);
129 glClearColor(0.2f, 0.2f, 0.2f, 1);
132 glDepthFunc(GL_LESS);
133 glEnable(GL_DEPTH_TEST);
135 glEnable(GL_CULL_FACE);
143 glDeleteBuffers(1, &vertex_buffer);
144 glDeleteVertexArrays(1, &vao);
150 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
155 unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
158 if(mb & SDL_BUTTON(1))
162 else if(mb & SDL_BUTTON(3))
166 else if(mb & SDL_BUTTON(2))
176 glBindVertexArray(vao);
178 glUseProgram(program);
186 Transform mvp= projection * view * model;
190 location= glGetUniformLocation(program,
"mvpMatrix");
191 glUniformMatrix4fv(location, 1, GL_TRUE, mvp.
data());
198 glDrawArrays(GL_TRIANGLES, 0, vertex_count);
202 glBindVertexArray(0);
207 int main(
int argc,
char **argv )
222 printf(
"[error] init failed.\n");
representation d'un objet / maillage.
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) const
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
std::size_t vertex_buffer_size() const
renvoie la longueur (en octets) du vertex buffer.
int vertex_count() const
renvoie le nombre de sommets.
std::size_t normal_buffer_size() const
renvoie la longueur (en octets) du normal buffer.
const float * normal_buffer() const
renvoie l'adresse de la normale du premier sommet. par convention, la normale est un vec3,...
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
void lookat(const Point ¢er, const float size)
observe le point center a une distance size.
void move(const float z)
rapproche / eloigne la camera du centre.
Transform projection(const int width, const int height, const float fov)
fixe la projection reglee pour une image d'aspect width / height, et une demi ouverture de fov degres...
void translation(const float x, const float y)
deplace le centre / le point observe.
void rotation(const float x, const float y)
change le point de vue / la direction d'observation.
Transform view() const
renvoie la transformation vue.
Context create_context(Window window)
cree et configure un contexte opengl
int window_height()
renvoie la hauteur de la fenetre de l'application.
void release_window(Window window)
destruction de la fenetre.
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
Window create_window(const int w, const int h, const int major, const int minor, const int samples)
creation d'une fenetre pour l'application.
void release_context(Context context)
detruit le contexte openGL.
int window_width()
renvoie la largeur de la fenetre de l'application.
Transform Identity()
construit la transformation identite.
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
GLuint read_program(const char *filename, const char *definitions)
void program_uniform(const GLuint program, const char *uniform, const std::vector< unsigned > &v)
affecte un tableau de valeurs a un uniform du shader program.
int program_print_errors(const GLuint program)
affiche les erreurs de compilation.
int release_program(const GLuint program)
detruit les shaders et le program.
int init(std::vector< const char * > &options)
representation d'un point 3d.
vecteur generique, utilitaire.
int run(Window window, int(*draw)())
boucle de gestion des evenements de l'application.