|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
|
OpenGL depth buffer: chiarimenti
Ciao a tutti.
Vorrei un chiariemento sull'output di queste righe di codice; void DrawMyScene() { stanza.drawGLStanza glDepthFunc(GL_ALWAYS); pallina.drawGLPallina(); glDepthFunc(GL_LESS); } Per essere più chiari,quello che voglio ottenere è una pallina texturirizza all'interno di una stanza che sia sempre visibile, anche quando sia dietro un muro (la texture non importa che si veda in tal caso). So già che con le righe di codice sopra indicate disabilito il temporaneamente il depth buffer e faccio disegnare prima di ogni cosa la mia pallina (almeno così mi hanno spigato! :-)) Non capisco perchè, se mi trovo in una stanza senza muri, la texture della pallina a volte scompare e riappare mentre questa è in movimento e si vede la pallina con delle righe nere. Come posso evitare questo effetto? Avrei pensato di disegnare intorno alla sfera un cerchietto trasparente con il depth buffer disabilitato,e di tenerlo abilitato sul resto della sfera, ma non ho la minima idea di come fare.
__________________
God rides DUCATI! |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
La glDepthFunc imposta il criterio in base al quale viene utilizzato il depth buffer, ovvero il buffer dove OpenGL mantiene la profondità di ciascun pixel (non so se è corretto chiamarlo pixel, forse "frammento" sarebbe + corretto, ma non sono sicuro).
Quindi nel codice che hai postato, la stanza viene disegnata per intero (la profondità dei poligoni viene ignorata, se c'è un poligono che sta dietro a un altro, potrebbe venire disegnato davanti), mentre della pallina vengono disegnati solo i poligoni che stanno davanti e che coprono quelli che stanno dietro, perché prima di disegnare la pallina viene reimpostato il criterio per l'uso del depth buffer. Poi il programma ce l'hai tu, quindi tu sai qual'è il suo effetto grafico finale Ciao |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Scusa, avevo letto male il messaggio: ho letto male il codice e non ho letto la seconda parte
Allora, se disabiliti il depth buffer, la pallina viene disegnata sopra la stanza, ma circa metà dei poligoni che compongono la parte posteriore della pallina potrebbero essere disegnati davanti a quelli che compongono la parte anteriore; ecco spiegato lo strano effetto grafico. Il fatto è che la scena che vorresti disegnare è incoerente: dovresti disegnare davanti una cosa che in realtà sta dietro! Secondo me quello che devi fare è lasciar perdere il depth buffer e lavorare sulle matrici: al momento del disegno della pallina la matrice (modelview o projection, vedi un po' tu Ri-ciao Ultima modifica di 71104 : 11-02-2005 alle 17:09. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
|
Ho risolto con un piccolo trucco: Ho disegnato attorno alla mia pallina due cerchietti neri paralleli tra loro con il depth buffer impostato come nel precente post e ho cammuffato il tutto mettendoci sopra la texture di una palla da basket
Ti ringrazio molto perch almeno adesso ho un 'idea più chiara di come si usa il depth buffer!
__________________
God rides DUCATI! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:09.



















