Salut
J'ai un problème pour afficher une Depth Map. Je veux l'afficher depuis le point de vue d'une lumière. je crée ainsi la texture:
J'ai une fonction compute qui remplit cette texture:
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 glGenTextures(1,&_shadowMap); glBindTexture(GL_TEXTURE_2D,_shadowMap); glEnable(GL_TEXTURE_2D); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, _width, _height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
Puis je l'affiche:
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 glEnable(GL_TEXTURE_2D); GLfloat light_pos[4]; glGetLightfv(GL_LIGHT0,GL_POSITION, light_pos); glPushAttrib(GL_VIEWPORT_BIT | GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT ); glViewport(0,0,_width,_height); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPerspective(60,(double)_width/(double)_height, 0.01, 3000.0); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); gluLookAt(light_pos[0],light_pos[1],light_pos[2], 0.0,0.0,0.0, 0.0,1.0,0.0); _vbo->draw(); glBindTexture(GL_TEXTURE_2D,_shadowMap); glCopyTexImage2D(GL_TEXTURE_2D,0,DEPTH_COMPONENT,0,0,_width,_height,0); glBindTexture(GL_TEXTURE_2D,0); glPopMatrix(); glMatrixMode(GL_PROJECTION); glMatrixMode(GL_MODELVIEW); glPopAttrib();
Le probleme c'est qu'a l'affichage j'ai un écran blanc. J'ai testé en mettant un type GL_RGBA a la place de DEPTH_COMPONENT lors de la copie, j'ai bien une texture mais je veux que le DEPTH pas le RGBA.
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 glMatrixMode( GL_PROJECTION ); glPushMatrix(); glLoadIdentity(); gluOrtho2D( -1, 1, -1, 1); glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glBindTexture(GL_TEXTURE_2D, _shadowMap); glEnable(GL_TEXTURE_2D); glBegin( GL_QUADS ) ; { glTexCoord2f(0.0f, 1.0f); glVertex3f( -1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( -1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f); } glEnd() ; glDisable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,0); glPopMatrix(); glMatrixMode( GL_PROJECTION ); glPopMatrix(); glEnable(GL_LIGHTING);
Si quelqu'un a une idée, peut etre que c'est un probleme d'affichage, je ne sais pas si une DEPTH MAP doit etre remappé pour etre affiché ou s'il y a un autre traitement a faire.
Merci
Partager