,

Je débute sous open-gl. Pour apprendre, j'essaye de faire un générateur de heightmap (tout simple pour l'instant).
Je rencontre donc un problème pour utiliser les VBO et afficher ma heightmap.
Le problème se trouve au niveau de l'utilisation de "GL_COLOR_ARRAY".

Voici ce que je (ne) fais (pas) dans mon programme :
- aucune optimisation pour l'affichage (plus tard).
- pas de calcul des normales (j'ai pas encore compris leur utilité, calcul des lumières?)

J'ai fait des tests de performances sur 2 PC différents :
PC1 : radeon x850, proc P-D805
PC2 : Accelerator Graphic Intel, proc Celeron 3,06Ghz

Pour une heightmap de 256*256 soit (sauf erreur) 130050 triangles sans utiliser "GL_COLOR_ARRAY".
PC 1 : 130 FPS (VBO)
PC 2 : 30 FPS (VBO)
PC 1 : 46 FPS (Vertex Buffer Array Non Compilé)
PC 2 : 25 FPS (VBANC)

Les résultats semblent à peu près cohérent.

Pour une heightmap de 256*256 soit (sauf erreur) 130050 triangles avec "GL_COLOR_ARRAY".
PC 1 : 19 FPS (VBO)
PC 2 : 21 FPS (VBO)
PC 1 : 29 FPS (VBANC)
PC 2 : 22 FPS (VBANC)

Là, je comprend pas...


Voici, mon code d'affichage

Ici, les déclaration des tableaux et du buffer dans mon .h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
valarray <GLfloat> * Vertices;
valarray <GLuint> * Indices;
valarray <GLubyte> * Colours;
GLuint BufferName[3];
Ici, c'est au moment de la création de la heightmap .cpp
Je passe la creation de la heightmap.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
glGenBuffersARB(3,BufferName);
Ici, c'est le contenu de la fonction d'affichage pour la version VBO
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
23
24
25
26
27
 
	if(hasColor)
	  {	
		glEnableClientState ( GL_COLOR_ARRAY );
		glBindBufferARB(GL_ARRAY_BUFFER_ARB, BufferName[2]);
    		glBufferDataARB(GL_ARRAY_BUFFER_ARB, Size*Size*3*sizeof(GLubyte), &(*Colours)[0], GL_STATIC_DRAW_ARB);
		glColorPointer(3, GL_UNSIGNED_BYTE, 0, 0);
	  }
 
 
	glBindBufferARB(GL_ARRAY_BUFFER_ARB, BufferName[1]);
	glBufferDataARB(GL_ARRAY_BUFFER_ARB, Size*Size*3*sizeof(GLfloat), &(*Vertices)[0], GL_STATIC_DRAW_ARB);
	glVertexPointer(3, GL_FLOAT, 0, 0);
 
	glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, BufferName[0]);
	glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, (Size-1)*(Size-1)*6*sizeof(GLuint), &(*Indices)[0] , GL_STATIC_DRAW_ARB);
	glIndexPointer(GL_UNSIGNED_INT, 0, 0);
 
	// Activation des parametres
	glEnableClientState ( GL_VERTEX_ARRAY );
 
	// Affichage des elements
	glDrawElements ( GL_TRIANGLES, (Size-1)*(Size-1)*6	, GL_UNSIGNED_INT, 0 );
 
	// Desactivation des parametres
	glDisableClientState ( GL_COLOR_ARRAY );
	glDisableClientState ( GL_VERTEX_ARRAY );
Si vous avez une idée sur mon problème, je suis vraiment preneur (je comprend pas ce qu'il se passe )

Merci.