Domanda

oggetti

??Sto caricando 3D (obj o 3ds o file Collada) nella mia applicazione OpenGL. L'ambiente 3 è abbastanza grande (a poche centinaia di metri di tutti gli assi). Il mio problema è che più piccole 3D oggetti (vale a dire nell'ordine di ~ <1-2m) non sembrano essere di profondità testato correttamente. A seconda della zoom della telecamera, a volte riesco a vedere la faccia posteriore dell'oggetto (ho usato un semplice cubo per testare) o di altre facce di diventare visibile / invisibile / strappata. Si prega di vedere le immagini allegate per una spiegazione migliore. Sono portato a credere che il problema è dovuto al mipmapping essere abilitato. Mi dovrebbero o come a mipmapping disabilitare (qualcuno può suggerire un semplice, modo veloce per fare questo) oppure impostare la risoluzione a essere maggiore per gli oggetti mipmapped. O sto abbaiare contro l'albero sbagliato completamente?

alt text alt text alt text

Grazie

Chris

È stato utile?

Soluzione

Questo è il risultato di una scarsa precission z-buffer, che è un problema in giochi che hanno mondi enormi ma (relativamente) piccoli oggetti. La soluzione immediata sarebbe quella di provare a utilizzare un z-buffer 24 bit invece di un 16 bit uno. Un altro modo per affrontare questo sarebbe quello di rendere il mondo di gioco esso due passi, in primo luogo i grandi oggetti lontani, quindi deselezionare la Zbuffer e poi disegnare gli oggetti più vicini.

Questo problema specifico si chiama Z-fighting a proposito, ecco una grande risorsa su questo tema: http://www.codermind.com/articles/Depth-buffer-tutorial.html

Il take-away è l'ultimo comma del citato articolo:

il vero problema è che non si può disegnare entrambi oggetti molto lontano e oggetti molto vicino con l' stesse equazioni tampone profondità. Se tu vuole disegnare molto lontano gli oggetti allora si bisogno di sacrificare il tuo vicino vista da spingendo ulteriormente. Per evitare il clipping artefatti che possono rendere la vostra collisione busta abbastanza grande in modo che la vostra piano di clip sarà un non intercetta oggetto esistente all'interno del vostro tronco di cono. Oppure si può fare oggetto gradualmente scomparire con trasparenza, dato che venire vicino al vostro piano di clip.

Se si desidera mantenere in prossimità di oggetti e allo stesso tempo trarre montagne (o pianeti) in lontananza, allora si può tagliare il il rendering in parti. Primo disegno gli oggetti lontani, quindi cancellare la memoria di profondità e rendendo gli oggetti vicini con differente z tampone.

Altri suggerimenti

Come Julio, credo che questo è un problemi di profondità di precisione, non è qualcosa legato alla MIP-mapping. Comunque, io suggerisco di iniziare regolando il tuo vicino e da lontano piano di ritaglio prima di cambiare qualsiasi altra cosa (Probabilmente si sta già utilizzando una profondità di 24 bit tampone in ogni modo, dato che questo è il default sulla maggior parte dei driver / carte). In particolare il piano vicino deve essere il più lontano possibile per la vostra scena. Cercare le chiamate verso glFrustum o gluPerspective.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top