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 !

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,
	};
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
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);
}
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
 
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);
}