Bonjour !
je commence tout juste à rentrer dans opengl, et j'ai un peu de mal à comprendre comment changer le nombre de vertex d'un objet.
Je souhaite par exemple changer la forme de mon objet d'un carré en triangle par appel clavier.
Le programme_shader est compilé au démarrage de l'appli, et fonctionne avec la forme initialisée au début, mais dès que je lance load_vertex_array(Carre) plus rien ne s'affiche. Faut il détruire le programe shader et le recompiler ? auquel cas quelle procédure utiliser ?
J'ai l'impression de louper quelque chose dans la comprehension de tout çà ...
merci !
Le chargement de l'objet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 //formes prédéfinies GLfloat Carre[] = { -0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, -0.5f, -0.5f, 0.0f }; GLfloat Triangle[] = { 0.0f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, -0.5f, -0.5f, 0.0f, };
L'affichage de l'objet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int load_vertex_array(GLfloat *PPoints) { polygon_size=sizeof (PPoints); glBindBuffer (GL_ARRAY_BUFFER, vbo); glBufferData (GL_ARRAY_BUFFER, (polygon_size*3) * sizeof (GLfloat), PPoints, GL_STATIC_DRAW); glBindBuffer (GL_ARRAY_BUFFER, vbo); glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE,sizeof(PPoints), NULL); glBindVertexArray(0); return(0); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int draw_polygon() { glUseProgram (shader_programme); glBindVertexArray (vao); glDrawArrays (GL_POLYGON, 0, polygon_size); glUseProgram(0); return(0); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 // draws a single frame int RenderMain() { // clear everything glClearColor(0.3f, 0.3f, 0.3f, 1.0f);//background color glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glEnable(GL_BLEND) ; glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); draw_polygon(); if(index_show_menu_geometry==1) {draw_menu_geometry(window, menu_geometry_x, menu_geometry_y);} sprintf(feedback,"x:%f - y: %f Action: %d Polygon points: %d", mouse_ox ,mouse_oy , click_button_action_is,polygon_size); print_data_feedback(-.99,.95,.4,.1); glDisable(GL_BLEND); return(0); }
Partager