Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema con il Depth Buffer in OpenGL
Forum - C/C++ - Problema con il Depth Buffer in OpenGL

Avatar
bonz_88 (Normal User)
Newbie


Messaggi: 14
Iscritto: 03/11/2006

Segnala al moderatore
Postato alle 21:50
Martedì, 09/01/2007
Codice sorgente - presumibilmente C/C++

  1. void render() {
  2. glEnable(GL_DEPTH_TEST);
  3. glClearColor(0.0,0.0,0.0,0.0);
  4. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    
  5. glLoadIdentity();
  6. gluLookAt(0.0,0.0,0.3,0.0,0.0,-1.0,0.0,1.0,0.0);
  7. glBegin(GL_TRIANGLES);
  8.         glColor3f(1.0,0.0,0.1); //ROSSO
  9.         glVertex3f(-0.2,0.0,0.1);
  10.         glVertex3f(0.2,0.0,0.1);
  11.         glVertex3f(0.0,0.15,0.1);
  12.  
  13.         glColor3f(0.0,1.0,0.0); //VERDE
  14.         glVertex3f(-0.2,0.0,-0.1);
  15.         glVertex3f(0.2,0.0,-0.1);
  16.         glVertex3f(0.0,0.15,-0.1);
  17. glEnd();
  18. SwapBuffers(buffer);
  19. }



Questa funzione dovrebbe visualizzare due triangoli sovrapposti. La camera è fissata nel punto (0.0,0.0,0.3) ed è diretta in direzione (0.0,0.0,-1.0). Il triangolo rosso, essendo a distanza minore dalla camera (0.2), dovrebbe stare quindi davanti al triangolo verde (che invece sta a 0.4 dalla camera), che quindi non viene visualizzato. Lanciando il programma però, ho notato che la situazione è opposta! Ovvero il triangolo verde è in primo piano mentre quello rosso ne viene coperto! Qualcuno riesce a darmi una mano?
(Dimenticavo, glDepthFunc è settato a GL_LESS per default, non l'ho modificato!).


Ultima modifica effettuata da bonz_88 il 09/01/2007 alle 21:53
PM Quote
Avatar
Black Shadow (Founder Member)
Expert


Messaggi: 323
Iscritto: 30/03/2006

Segnala al moderatore
Postato alle 12:21
Mercoledì, 10/01/2007
A me funziona, cioè, viene il rosso avanti..:-|

PM Quote
Avatar
bonz_88 (Normal User)
Newbie


Messaggi: 14
Iscritto: 03/11/2006

Segnala al moderatore
Postato alle 15:12
Mercoledì, 10/01/2007
Riusciresti a scrivermi il tuo listato? Così provo a fare copia-incolla per vedere se funziona anche sul mio computer, è l'unica...

Ultima modifica effettuata da bonz_88 il 10/01/2007 alle 15:12
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:55
Mercoledì, 10/01/2007
Prova a controllare i parametri del PIXELFORMATDESCRIPTOR.


Il mio blog: https://piero.dev
PM Quote
Avatar
bonz_88 (Normal User)
Newbie


Messaggi: 14
Iscritto: 03/11/2006

Segnala al moderatore
Postato alle 20:15
Mercoledì, 10/01/2007
Codice sorgente - presumibilmente C/C++

  1. void SetupPixelFormat (HDC hDC)  
  2. {
  3. int nPixelFormat;
  4. static PIXELFORMATDESCRIPTOR pdf = {
  5. sizeof(PIXELFORMATDESCRIPTOR),                        
  6. 1,                                       
  7. PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,    
  8. PFD_TYPE_RGBA,                                
  9. 16, //bit per pixel (2^16 colori)
  10. 0,0,0,0,0,0,                                      
  11. 0,
  12. 0,
  13. 0,
  14. 0,0,0,0,
  15. 16, //bitzbuffer                                  
  16. 0,
  17. 0,
  18. PFD_MAIN_PLANE,
  19. 0,
  20. 0,0,0 };
  21.  
  22. nPixelFormat = ChoosePixelFormat(hDC,&pdf);                      
  23. SetPixelFormat(hDC, nPixelFormat, &pdf);
  24. }



Non mi sembra che ci sia nulla di sbagliato..i bit per lo z-buffer sono gli stessi per il colore dei pixel...

PM Quote
Avatar
bonz_88 (Normal User)
Newbie


Messaggi: 14
Iscritto: 03/11/2006

Segnala al moderatore
Postato alle 15:23
Giovedì, 11/01/2007
Sono riuscito a risolvere il problema, ho dovuto creare un viewing volume appropriato, si vede che quello di defualt aveva dei clipping planes errati per le profondità che avevo impostato...Ringrazio comunque chi mi ha risposto!

PM Quote