Topologie primitive
Direct3D supporta diverse topologie primitive, che definiscono il modo in cui i vertici vengono interpretati e sottoposti a rendering dalla pipeline, ad esempio elenchi di punti, elenchi di righe e strisce di triangoli.
Topologie primitive di base
Sono supportate le topologie primitive di base o i tipi primitivi seguenti:
Per una visualizzazione di ogni tipo primitivo, vedere il diagramma più avanti in questo argomento in Direzione avvolgimento e posizioni dei vertici iniziali.
La fase Input Assembler (IA) legge i dati dai buffer dei vertici e degli indici, assembla i dati in queste primitive e quindi invia i dati alle fasi rimanenti della pipeline.
Adiacenza primitiva
Tutti i tipi primitivi Direct3D (a eccezione dell'elenco di punti) sono disponibili in due versioni: un tipo primitivo con adiacenza e un tipo primitivo senza adiacenza. Le primitive con adiacenza contengono alcuni dei vertici circostanti, mentre le primitive senza adiacenza contengono solo i vertici della primitiva di destinazione. Ad esempio, la primitiva dell'elenco di righe ha una primitiva di elenco di righe corrispondente che include l'adiacenza.
Le primitive adiacenti sono destinate a fornire altre informazioni sulla geometria e sono visibili solo tramite uno shader geometry. L'adiacenza è utile per gli shader geometry che usano il rilevamento della silhouette, l'estrusione del volume di ombreggiature e così via.
Si supponga, ad esempio, di voler disegnare un elenco di triangoli con adiacenza. Un elenco di triangoli che contiene 36 vertici (con adiacenza) produrrà 6 primitive completate. Le primitive con adiacenza (ad eccezione delle strisce di linea) contengono esattamente il doppio di vertici della primitiva equivalente senza adiacenza, dove ogni vertice aggiuntivo è un vertice adiacente.
Direzione di avvolgimento e posizioni dei vertici iniziali
Come illustrato nella figura seguente, un vertice iniziale è il primo vertice non adiacente in una primitiva. Un tipo primitivo può avere più vertici iniziali definiti, purché ognuno venga usato per una primitiva diversa.
- Per una striscia di triangoli con adiacenza, i vertici iniziali sono 0, 2, 4, 6 e così via.
- Per una striscia di linea con adiacenza, i vertici iniziali sono 1, 2, 3 e così via.
- Una primitiva adiacente, d'altra parte, non ha vertici iniziali.
Nella figura seguente viene illustrato l'ordinamento dei vertici per tutti i tipi primitivi che l'assemblaggio di input può produrre.
I simboli nella figura precedente sono descritti nella tabella seguente.
Simbolo | Nome | Descrizione |
---|---|---|
Vertice | Punto nello spazio 3D. | |
Direzione di avvolgimento | Ordine dei vertici durante l'assemblaggio di una primitiva. Può essere in senso orario o antiorario. | |
Vertice iniziale | Primo vertice non adiacente in una primitiva contenente dati per costante. |
Generazione di più strisce
È possibile generare più strisce attraverso il taglio a strisce. È possibile eseguire un taglio di striscia richiamando in modo esplicito la funzione HLSL RestartStrip o inserendo un valore di indice speciale nel buffer di indice. Questo valore è -1, che è 0xffffffff per indici a 32 bit o 0xffff per indici a 16 bit.
Un indice di –1 indica un 'cut' esplicito o 'restart' della striscia corrente. L'indice precedente completa la primitiva o striscia precedente e l'indice successivo avvia una nuova primitiva o striscia.
Per altre info sulla generazione di più strisce, si veda la fase Geometry Shader (GS).
Argomenti correlati