Domanda

Quando si utilizza la modalità di riempimento wireframe in Direct3D, tutte le facce rettangolari mostrano una diagonale che attraversa a causa della divisione della faccia in due triangoli. Come elimino questa linea? Voglio anche rimuovere le superfici nascoste. La modalità Wireframe non lo fa.

Devo visualizzare un modello Direct3D nella vista isometrica wireframe. La scena renderizzata deve mostrare i confini delle facce del modello ma deve escludere le diagonali.

È stato utile?

Soluzione

Sbarazzarsi delle diagonali è complicato in quanto è probabile che l'hardware disegni solo triangoli e sarebbe difficile determinare quale bordo è la diagonale. In alternativa, è possibile applicare una trama wireframe (o uno shader che genera una trama adatta). Ciò risolverebbe i problemi delle linee nascoste, ma sembrerebbe strano in quanto lo spessore delle linee dipenderà dalla distanza z.

L'uso delle primitive di linea non è banale, anche se le superfici rivolte lontano dalla fotocamera possono essere facilmente rimosse, le superfici parzialmente oscurate richiederebbero il ritaglio manuale. Come ultimo pensiero, segui un approccio a due passaggi: il primo passaggio disegna i poligoni pieni ma disegna solo sul buffer z, quindi disegna le linee sopra la parte superiore con un'adeguata deviazione z. Ciò gestirà il problema di superficie parzialmente oscurato.

Altri suggerimenti

La modalità wireframe integrata rende i bordi delle primitive. Come in D3D le primitive sono triangoli (o linee o punti - ma non poligoni arbitrari), ciò significa che il modo incorporato non lo taglierà.

Suppongo che devi cercare una sorta di "rilevamento dei bordi" algoritmi. Questi potrebbero operare nello spazio dell'immagine, dove si trasforma il modello in una trama, assegnando un colore unico per ogni poligono logico, e quindi eseguendo un passaggio postelaborazione usando il pixel shader e rilevando eventuali cambiamenti di colore (cambiamenti di colore = output nero, altrimenti output qualcos'altro ).

In alternativa, potresti costruire un elenco di linee che ha solo i bordi di cui hai bisogno e semplicemente renderizzarle.

Un'altra alternativa potrebbe essere l'utilizzo di shader di geometria in Direct3D 10. In qualche modo, molte opzioni diverse qui.

Penso che dovrai disegnare quella linea manualmente, poiché la modalità wireframe è una modalità integrata, quindi non penso che tu possa modificarla. Puoi ottenere l'elenco dei vertici nella tua mesh ed elaborarli in un elenco di linee che devi disegnare.

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