Bonjour,

J'aimerais savoir si il est possible d'appliquer un fog(brouillard) de densité variable ou plusieurs textures (glBindTexture) dans le même vbo.
Ma méthode c'est d'afficher par tranche avec de appel multiple de la fonction 'glDrawArrays'

Je suis novice sur OpenGL.

Je voudrais savoir si ma méthode est bon , pourtant ca à l'air de marcher.


code source incompléte
Fabrication de VBO :

..
..
...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
					glGenBuffers( 1, &lesvertex );
					glGenBuffers( 1, &lestextures );
 
 
 
 
 
					glBindBuffer(GL_ARRAY_BUFFER, lesvertex);
					glBufferData(GL_ARRAY_BUFFER, ne*sizeof(GLfloat), CubeArray, GL_STATIC_DRAW);
 
					glBindBuffer(GL_ARRAY_BUFFER, lestextures);
					glBufferData(GL_ARRAY_BUFFER, nt*sizeof(GLfloat), TxtArray, GL_STATIC_DRAW);

Render
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
glPushMatrix();
			glRotatef( ang, 0.0f, 1.0f,0.0f);
			glTranslatef(xp,haut,yp);
 
			/*		glEnableClientState( GL_VERTEX_ARRAY );
 
					glEnableClientState(GL_TEXTURE_COORD_ARRAY);*/
			// Utilisation des données des buffers
			int err;
			glEnable(GL_TEXTURE_2D);
			glBindBuffer(GL_ARRAY_BUFFER, lesvertex);
			glVertexPointer( 3, GL_FLOAT, 3 * sizeof(float),BUFFER_OFFSET( 0 ));
 
			//glColorPointer( 3, GL_FLOAT, 2 * sizeof(float), 0 );
			glClientActiveTexture(GL_TEXTURE0);
			glBindBuffer(GL_ARRAY_BUFFER, lestextures);
 
			// Activation d'utilisation des tableaux
 
			//glTexCoordPointer(2, GL_FLOAT, sizeof(MyVertex), BUFFER_OFFSET(24));
 
			glTexCoordPointer(2, GL_FLOAT, 2 * sizeof(float),BUFFER_OFFSET( 0));
 
			//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);
			 glEnable(GL_FOG);
			GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0};
 
			  int fogMode = GL_EXP;
			  glFogi (GL_FOG_MODE, fogMode);
			  glFogfv (GL_FOG_COLOR, fogColor);
			  glFogf (GL_FOG_DENSITY, 0.35);
 
			glEnableClientState( GL_VERTEX_ARRAY );
 
			// Rendu de notre géométrie
			//glDrawElements(GL_TRIANGLES, ne, GL_UNSIGNED_INT, 0);
			int ns=ne/3.0;
			glBindTexture(GL_TEXTURE_2D,murneg);
			glEnableClientState( GL_TEXTURE_COORD_ARRAY );
			for (int i = 0 ; i<ns/3;i++)
			{
				if (i>(ns*0.15)) //beaucoup de brouillard à partir du tiers des primitives
				{
					 glFogf (GL_FOG_DENSITY, 0.99);
				}
				glDrawArrays(GL_TRIANGLES,i*3,3);
 
			}
//MULTIPLE TEXTURE, 2 TEXTURES dans tout le VBO
			/*glEnableClientState( GL_TEXTURE_COORD_ARRAY );
			glDrawArrays(GL_TRIANGLES,0,ns/2.0);
			glDisableClientState( GL_TEXTURE_COORD_ARRAY );
 
			glBindTexture(GL_TEXTURE_2D,mur);
			glEnableClientState( GL_TEXTURE_COORD_ARRAY );
			glDrawArrays(GL_TRIANGLES,ns/2.0,ns/2.0);*/
			glDisableClientState( GL_TEXTURE_COORD_ARRAY );
			glDisableClientState( GL_VERTEX_ARRAY );
			static int nufps=0;
			static int ds=GetTickCount();
			nufps++;
			if ((GetTickCount()-ds)>1000)
			{
				nufps=0;
				ds=GetTickCount();
			}
 
 
 
 
 
			//DrawPanneau(1.5,0);
			glPopMatrix();
Merci.