Domanda

Attualmente sto usando un VBO per le coordinate delle trame, le normali e i vertici di un modello (3DS) che sto disegnando con " glDrawArrays (GL_TRIANGLES, ...); " ;. Per il debug voglio mostrare (temporaneamente) le normali durante il disegno del mio modello. Devo usare la modalità immediata per tracciare ogni linea da vert a vert + normal -OPP- roba un altro VBO con vert e vert + normal per disegnare tutte le normali & # 8230; -O- c'è un modo per il vertex shader di usare il vertice e i dati normali già passati quando si disegna il modello per calcolare il V + N usato quando si disegnano le normali?

È stato utile?

Soluzione

No, non è possibile tracciare linee aggiuntive da uno shader di vertici.

Uno shader di vertici non riguarda la creazione di geometrie, ma il calcolo per vertice. Usando i vertex shader, quando dici glDrawArrays (GL_TRIANGLES, 0,3) , questo è ciò che specifica esattamente cosa disegnerai, ovvero 1 triangolo. Una volta che l'elaborazione raggiunge lo shader di vertice, puoi solo modificare le proprietà dei vertici di quel triangolo , non modificare in alcun modo, forma o forma, la topologia e / o il conteggio della geometria.

Quello che stai cercando è ciò che OpenGL 3.2 definisce uno shader di geometria , che consente di generare conteggio / topologia geometrica arbitraria da uno shader. Si noti tuttavia che questo è supportato solo tramite OpenGL 3.2, che al momento non sono supportate molte schede / driver (è uscito da qualche mese).

Tuttavia, devo sottolineare che la visualizzazione delle normali (nella maggior parte dei motori che supportano un qualche tipo di debug) viene solitamente eseguita con il rendering tradizionale delle linee, con un buffer di vertici aggiuntivo che viene riempito con le posizioni corrette (P, P + C * N) per ogni posizione della mesh, dove C è una costante che rappresenta la lunghezza che si desidera utilizzare per mostrare le normali. Scrivere ...

non è così complesso

Altri suggerimenti

Potresti approssimarlo disegnando la geometria due volte. Una volta disegnalo come faresti normalmente. La seconda volta, disegna la geometria come GL_POINTS e collega uno shader di vertice che compensa ogni posizione di vertice con la normale vertice.

Ciò comporterebbe che il tuo modello avesse una serie di punti fluttuanti sulla superficie. Ogni punto mostrerebbe la direzione della normale dal vertice a cui corrisponde.

Questo non è perfetto, ma potrebbe essere sufficiente, a seconda di cosa speri di usarlo.

AGGIORNAMENTO: AHA! E se passi un fattore di ridimensionamento costante allo shader di vertice e la tua applicazione interpola quel fattore tra 0 e 1 col passare del tempo, i tuoi punti resi dallo shader di vertice si animeranno nel tempo, a partire dal vertice a cui si applicano, e poi fluttuando nella direzione normale.

Probabilmente è possibile ottenere più o meno l'effetto giusto con uno shader di vertice abilmente scritto, ma sarebbe un sacco di lavoro. Dato che questo è comunque per scopi di debug, sembra meglio tracciare solo alcune linee; il colpo di prestazione non sarà grave.

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