Bonjour à tous.
Je bosse sur les VBOs en ce moment, car je trouve qu'il allie rapidité et puissance. Néanmoins, pour améliorer mon rendu, je me suis mis en tête d'intégrer le Bump Mapping.
J'ai copié les vertex Shader et pixel Shader. Bien sûr, mon loader de Shader et la compilation marchent parfaitement.
Pixel Shader :
et le vertex Shader :
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 varying vec3 normal,lightVec,viewVec; uniform sampler2D Texture0; uniform sampler2D Texture1; void main() { vec4 color=gl_Color; vec3 N=vec3(texture2D(Texture1,gl_TexCoord[1].st)); N.x=N.x-0.5; N.y=N.y-0.5; N.z=N.z-0.5; N=normalize(N); vec3 L=normalize(lightVec); vec3 V=normalize(viewVec); vec3 R=normalize(2.0*dot(N,V)*N-V); float LdotN=dot(L,N); float LdotR=dot(L,R); // diffuse if(LdotN<=0.5)color=gl_Color*LdotN*2.0; // speculaire else if(LdotR>0.7)color=gl_Color*LdotR*1.5-0.05; gl_FragColor=color*texture2D(Texture0,gl_TexCoord[0].st); }
J'ai recopié la partie d'initialisation des textures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 varying vec3 normal,lightVec,viewVec; void main() { normal=gl_NormalMatrix*gl_Normal; viewVec=-(gl_ModelViewMatrix*gl_Vertex).xyz; lightVec=(gl_LightSource[0].position).xyz+viewVec; gl_Position=ftransform(); gl_FrontColor = gl_Color; gl_TexCoord[0]= gl_MultiTexCoord0; gl_TexCoord[1]= gl_MultiTexCoord1; }
Et j'ai un peu de mal à comprendre pourquoi il fait appel deux fois aux mêmes fonctions ?!
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 glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Tex_id[0]); glActiveTextureARB(GL_TEXTURE1_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Tex_id[1]); int my_sampler_uniform_location; glUseProgram(program); my_sampler_uniform_location = glGetUniformLocationARB(program, "Texture0"); glActiveTexture(GL_TEXTURE0 + 0); glBindTexture(GL_TEXTURE_2D, Tex_id[0]); glUniform1i(my_sampler_uniform_location, 0); my_sampler_uniform_location = glGetUniformLocationARB(program, "Texture1"); glActiveTexture(GL_TEXTURE0 + 1); glBindTexture(GL_TEXTURE_2D, Tex_id[1]); glUniform1i(my_sampler_uniform_location, 1); glUseProgram(0);
De plus, lorsque j'appelle cette fonction, mon HUD 2D disparaît, et pas moyen de le faire réapparaître sans enlever cette fonction......
J'ai également recopié la partie du texturing, mais là un problème se pose, l'auteur utilise la vieille technique du glBegin(), glEnd(), pas pratique pour le chargement de modèles...
De plus, je ne vois pas ou il rebind les textures ?!
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 float position[] = {100*sin(-(float)clock()/1000),1.0,100*cos(-(float)clock()/1000),0.0}; glLightfv(GL_LIGHT0, GL_POSITION, position); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glColor3f(1,0,0); glPointSize(5); glBegin(GL_POINTS); glVertex3fv(position); glEnd(); glEnable(GL_TEXTURE_2D); glEnable(GL_LIGHTING); glColor3f(1,1,1); glUseProgram(program); glNormal3f(0,1,0); glBegin(GL_QUADS); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 0.0f); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 0.0f); glVertex3f(-100,0,-100); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 0.0f); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 0.0f); glVertex3f( 100,0,-100); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 1.0f); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 1.0f); glVertex3f( 100,0, 100); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 1.0f); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 1.0f); glVertex3f(-100,0, 100); glEnd(); glUseProgram(0);
Et même lorsque je copie tout en remplaçant mon système par celui ci, je vois juste un face texturée avec les deux textures mais aucun effet de Bump Mapping, toujours ces couleurs fluo de la texture de Bump.....
ça fait plusieurs heures que je cherche désespérement un moyen d'afficher cette effet, à savoir faire du Multi texturing avec les VBOs, puis appliquer le Bump Mapping, mais je n'y arrive pas ......
Les liens que j'ai trouvé viennent de ce forum, et il y a plusieurs fonctions d'activations, mais dans un désordre complexe, j'ai du mal à m'y retrouver.
Voilà, merci d'avance à ceux qui pourront m'aider !!
Partager