Condividi tramite


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.

diagramma dell'ordinamento dei vertici per i tipi primitivi

I simboli nella figura precedente sono descritti nella tabella seguente.

Simbolo Nome Descrizione
simbolo per un vertice Vertice Punto nello spazio 3D.
simbolo per la direzione di avvolgimento Direzione di avvolgimento Ordine dei vertici durante l'assemblaggio di una primitiva. Può essere in senso orario o antiorario.
simbolo per il vertice iniziale 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).

Fase Input-Assembler (IA)

Pipeline grafica