Wireframe OpenGL


18

No, non sto cercando glPolygonMode. Sto cercando un metodo, possibilmente uno shader GLSL che produca quegli oggetti wireframe in stile retrò. Eventuali suggerimenti?

Qualcosa di simile a Vector Tanks.

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

Preferibilmente la soluzione dovrebbe funzionare anche su OpenGL ES 2.0.

Eventuali suggerimenti e suggerimenti (purché non NULL) apprezzati!

Risposte:



5

Consiglio vivamente di usare le trame, come ha detto Dave. Potrebbe essere una sorta di dolore, ma fornirebbe prestazioni molto migliori, credo.

Potresti provare a cercare algoritmi di rilevamento dei bordi . Se crei le tue mesh usando la colorazione del vertice con colori solidi e valori alfa medi (per una leggera trasparenza) e poi usi uno shader per il rilevamento dei bordi, potrebbe sembrare abbastanza buono. Non sarebbe lo stesso, ma potrebbe piacerti ancora di più; o forse no.

Altrimenti potresti guardare una soluzione a due passaggi, disegnare poligoni traslucidi (di nuovo, impostare i colori dei vertici su un colore solido con un valore alfa medio), quindi impostare glPolygonMode (GL_LINE) e modificare glLineWidth come desiderato (forse in base all'oggetto distanza) e disegnare nuovamente i poligoni.

È un po 'tardi e sto facendo fatica a leggere questo, ma una discussione nel forum punta a questo PDF: Rendering Wireframe a passaggio singolo . Mi scuso se non è pertinente.


+1: sarebbe più facile se trovassi un modo per generare le trame in qualche modo. Impossibile utilizzare glPolygonMode a causa del successivo targeting OpenGL ES (iStuff).
Kornel Kisielewicz,

2

So che probabilmente non è quello che stai cercando, ma sembra che Vector Tanks usi solo modelli strutturati. La trama dà l'aspetto della cornice del filo, corre sul mio iPod touch che non supporta gli shader.


Lo so, lo so, ma potrei anche incollare le immagini di Subversion e non usa affatto le trame (AFAIK)
Kornel Kisielewicz,

2

L'unico modo in cui l'ho visto è con texture ad alta risoluzione, per lo più nere, come quelle di Tron 2.0. Le loro trame sono quasi universalmente o un nero piatto con un bordo spesso e colorato o una semplice trama del rumore Perlin.

Hanno applicato una semplice post-elaborazione per ottenere l'effetto bagliore.


+1: Conoscevo l'articolo, ma grazie per averlo ricordato - è davvero un buon articolo (e aiuta con il secondo problema che ho avuto - bagliore).
Kornel Kisielewicz,

1

Puoi provare una sorta di semplice funzione di distanza nel pixel shader. Forse qualcosa come coordinate baricentriche (memorizza RGB diversi sui vertici e il rasterizzatore farà la maggior parte del lavoro per te).

Quindi il tuo pixel shader avrà le informazioni di cui ha bisogno su dove si trova un poligono del pixel corrente: vicino a un vertice, vicino a un bordo o nel mezzo ...

Sospetto in pratica, però, sarebbe più facile strutturarlo.


1

Che ne dici di questo: prendi il tuo modello e smussa i bordi che vuoi apparire come contorni. Colora le facce che sono state create con un verde opaco brillante, mentre tutte le vecchie facce sono di un verde scuro traslucido.

Ciò non richiede affatto l'uso di pixel shader. (Nessuna trama, in effetti; solo i colori del viso.) Richiede un po 'di pre-elaborazione del modello da parte tua, che potrebbe essere o meno un problema.

Non sarai in grado di vedere il contorno quando la superficie smussata è perpendicolare alla vista. Se questo ti disturba, puoi estrudere un po 'la superficie smussata, colorando l'estrusione come avresti la smussatura. Puoi giocare con diversi gradi di smussatura ed estrusione per rendere le linee più sottili e spesse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.