Domanda

Sto usando Direct3D per visualizzare una serie di sezioni I utilizzate nella costruzione in acciaio. Potrebbero esserci centinaia di casi di queste sezioni I in tutta la mia scena.

Potrei farlo in due modi:

I-Sections

Usando il metodo A, ho meno superfici. Tuttavia, con l'abbattimento del backface attivato, le superfici saranno visibili da un solo lato. Se l'abbattimento della faccia posteriore è disattivato, è possibile che le flange (piastre orizzontali) e il nastro (piastra verticale) vengano visualizzati nell'ordine sbagliato.

Il metodo B sembra corretto (e potrei mantenere attivo l'abbattimento del backface), ma nel mio modello lo spessore delle lastre nella sezione I non ha importanza e vorrei evitare di dover creare una striscia triangolare separata per ogni lato dei piatti.

C'è una soluzione migliore? Esiste un modo per disattivare la selezione del backface solo per determinate chiamate di DrawIndexedPrimitives? Vorrei anche una risposta neutrale rispetto alla piattaforma, se ce n'è una.

È stato utile?

Soluzione

Prima di tutto, l'abbattimento del backface non ha nulla a che fare con l'ordine in cui gli oggetti sono resi. A parte questo, sceglierei l'approccio B per nessun motivo particolare se non che probabilmente avrà un aspetto migliore. Anche questo oggetto probabilmente non è altro che una mano piena di triangoli; avere centinaia in una scena non dovrebbe essere un problema. Se lo è, prova a esaminare l'istanziazione hardware.

Altri suggerimenti

In OpenGL puoi cambiare la selezione del backface per ogni triangolo che disegni:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

Penso che qualcosa di simile sia possibile anche in Direct3D

Se le sezioni I non cambiano spesso, carica tutte le sezioni in un grande buffer vertice / indice e disegnale con una sola chiamata. Questo è il modo più efficace per disegnare le cose e la scheda grafica farà un lavoro veloce anche se spingi mezzo milione di triangoli su di essa.

Sì, è necessario duplicare i dati dei vertici per tutte le sezioni, ma è così che D3D9 è destinato a essere utilizzato.

Vorrei andare con A dato che la distanza da cui vedresti la B sarebbe uno spreco di potenza di elaborazione per disegnare tutti quei triangoli degeneri.

Inoltre, li licenzierei semplicemente su un buffer z e gli permetterei di risolvere tutto.

Se diventa troppo lento, allora inizierei a ottimizzare, ma anche le schede grafiche dei consumatori possono disegnare milioni di poligoni al secondo.

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