Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1385 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL] shadow volume

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OpenGL] shadow volume

n°1555588
casafa
Posté le 04-05-2007 à 22:47:43  profilanswer
 

Bonjour,
 
J'essaye d'implémenter les shadows volume dans mon programme.
1) Donc j'ai fait ma fonction qui affiche le volume d'ombre et elle fonctionne très bien.
2) Maintenant j'essaye d'afficher l'ombre grace au sencil buffer mais ça ne fonctionne pas :
 

Code :
  1. //On rempli le sencil buffer
  2.         glDepthMask(0);
  3.         glColorMask(0, 0, 0, 0);
  4.         glDisable(GL_CULL_FACE);
  5.         glEnable(GL_STENCIL_TEST);
  6.         glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT);
  7.         glClear(GL_STENCIL_BUFFER_BIT);
  8.         glActiveStencilFaceEXT(GL_BACK);
  9.         glStencilOp(GL_KEEP,            // stencil test fail
  10.                     GL_KEEP,            // depth test fail
  11.                     GL_DECR_WRAP_EXT);  // depth test pass
  12.         glStencilMask(~0);
  13.         glStencilFunc(GL_ALWAYS, 0, ~0);
  14.         glActiveStencilFaceEXT(GL_FRONT);
  15.         glStencilOp(GL_KEEP,            // stencil test fail
  16.                     GL_KEEP,            // depth test fail
  17.                     GL_INCR_WRAP_EXT);  // depth test pass
  18.         glStencilMask(~0);
  19.         glStencilFunc(GL_ALWAYS, 0, ~0);
  20. CShadowVolume::showShadowVolume(this, entities); //dessine le volume d'ombre
  21. glColorMask(1, 1, 1, 1);
  22. glStencilFunc(GL_EQUAL, 0, ~0);
  23. glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
  24. //Affiche du gris aux zones d'ombre
  25. glColor3f(0.7, 0.7, 0.7);
  26. glMatrixMode(GL_PROJECTION);
  27. glPushMatrix();
  28.  glLoadIdentity();
  29.  glOrtho(0.0, CRendererOGL::getSceneWidth(), CRendererOGL::getSceneHeight(), 0.0, -1.0, 1.0);
  30.  glMatrixMode(GL_MODELVIEW);
  31.  glPushMatrix();
  32.   glLoadIdentity();
  33.   glBegin(GL_QUADS);
  34.    glVertex2f(0.0, 0.0);
  35.    glVertex2f(CRendererOGL::getSceneWidth(), 0.0);
  36.    glVertex2f(CRendererOGL::getSceneWidth(), CRendererOGL::getSceneHeight());
  37.    glVertex2f(0.0, CRendererOGL::getSceneHeight());
  38.   glEnd();
  39.   glMatrixMode(GL_PROJECTION);
  40.  glPopMatrix();
  41.  glMatrixMode(GL_MODELVIEW);
  42. glPopMatrix();
  43. glColor3f(1.0, 1.0, 1.0);
  44. glDisable(GL_STENCIL_TEST);
  45. glDisable(GL_STENCIL_TEST_TWO_SIDE_EXT);
  46. glDepthMask(1);
  47. glEnable(GL_CULL_FACE);


 
J'ai un écran tout gris....et le pire c'es si je remplace cette ligne glStencilFunc(GL_EQUAL, 0, ~0) par glStencilFunc(GL_NOTEQUAL, 0, ~0), j'ai aussi un écran tout gris. Alors que le gris devrait être affiché qu'aux zones d'ombre :(
 
Merci d'avance...


Message édité par casafa le 04-05-2007 à 22:48:20
mood
Publicité
Posté le 04-05-2007 à 22:47:43  profilanswer
 

n°1555896
casafa
Posté le 05-05-2007 à 23:44:53  profilanswer
 

Vu que personne ne semble savoir répondre à ma question :( , j'aimerais savoir si il est possible de récupérer les bits du stencil buffer ? Comme ça je pourrait voir plus facilement où se trouve l'erreur dans mon code, merci

n°1555925
Jux_
Posté le 06-05-2007 à 09:35:55  profilanswer
 

Je ne sais pas si c'est exactement ce que tu cherches mais toutes les valeurs que tu peux query par rapport au Stencil Buffer sont :
GL_STENCIL_FUNC, GL_STENCIL_REF, GL_STENCIL_VALUE_MASK, GL_STENCIL_FAIL, GL_STENCIL_PATH_DEPTH_FAIL, GL_STENCIL_PASS_DEPTH_PASS.
 
A récuperer avec glGetIntegerv.

n°1555941
casafa
Posté le 06-05-2007 à 11:40:48  profilanswer
 

Merci pour cette réponse mais ça ne m'aide pas.
 
Ce que j'aurais voulu récupérer c'est le buffer du stencil pour savoir par exemple à quel valeur se trouve le pixel 1024,544...

n°1556017
Jux_
Posté le 06-05-2007 à 15:16:59  profilanswer
 

Je crois que j'ai trouvé ce que tu cherches en fait.
 
void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
 
avec format = GL_STENCIL_INDEX.
 
C'est tout ce que j'ai reussi a trouver. j'espere que ca va aider!
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL] shadow volume

 

Sujets relatifs
[Opengl] stencil buffer : comprend pas son fonctionnement[wxWidgets et OpenGL] Problème de stack overflow
[OpenGL] La scène suit la souris[c++][OpenGL] Comment modéliser une maille ?
minicarte pour un jeu en OpenGL[OpenGL] Ne pas afficher les faces arrières
OpenGL/3Ds/AllegroGL... !!?[OpenGL] glTexImage2D
pb pour executer un programme openglvolume d'un Tmediaplayer
Plus de sujets relatifs à : [OpenGL] shadow volume


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR