Condividi tramite


Wrapping delle trame (Direct3D 9)

In breve, il wrapping delle trame modifica il modo di base in cui Direct3D rasterizza i poligoni con trama usando le coordinate di trama specificate per ogni vertice. Durante la rasterizzazione di un poligono, il sistema esegue l'interpolazione tra le coordinate della trama in corrispondenza dei vertici del poligono per determinare i texel da usare per ogni pixel del poligono. In genere, il sistema considera la trama come un piano 2D, interpolando nuovi texel prendendo la route più breve dal punto A all'interno di una trama al punto B. Se il punto A rappresenta la posizione u, v (0,8, 0,1) e il punto B è in corrispondenza (0,1,0,1), la linea di interpolazione è simile al diagramma seguente.

diagramma di una linea di interpolazione tra due punti

Si noti che la distanza più breve tra A e B in questa illustrazione viene eseguita approssimativamente attraverso il centro della trama. L'abilitazione del wrapping delle coordinate u-texture o v-texture cambia il modo in cui Direct3D percepisce la route più breve tra le coordinate della trama nella direzione u e nella direzione virtuale. Per definizione, il wrapping delle trame fa sì che il rasterizzatore prenda la route più breve tra i set di coordinate della trama, presupponendo che 0,0 e 1,0 siano coincidenti. L'ultimo bit è la parte difficile: si può immaginare che l'abilitazione del wrapping delle trame in una direzione fa sì che il sistema consideri una trama come se fosse avvolta intorno a un cilindro. Si consideri ad esempio il diagramma seguente.

diagramma di una trama e due punti avvolti intorno a un cilindro

La figura precedente mostra come il wrapping nella direzione u - influisce sul modo in cui il sistema interpola le coordinate della trama. Usando gli stessi punti dell'esempio per trame normali, o nonwrapped, è possibile notare che il percorso più breve tra i punti A e B non è più al centro della trama; è ora oltre il confine in cui esistono insieme 0.0 e 1.0. Il wrapping nella direzione v è simile, ad eccezione del fatto che avvolge la trama intorno a un cilindro che si trova sul lato. Il wrapping sia nella direzione u che nella direzione virtuale è più complesso. In questo caso, è possibile immaginare la trama come toro o ad anello.

L'applicazione pratica più comune per la disposizione delle trame consiste nell'eseguire il mapping dell'ambiente. In genere, un oggetto con trama con una mappa di ambiente appare molto riflettente, che mostra un'immagine speculare dell'ambiente circostante dell'oggetto nella scena. Ai fini di questa discussione, immaginere una stanza con quattro pareti, ognuna dipinta con una lettera R, G, B, Y e i colori corrispondenti: rosso, verde, blu e giallo. La mappa dell'ambiente per una stanza così semplice potrebbe essere simile alla figura seguente.

illustrazione di strisce verticali di rosso, verde, blu e giallo

Si supponga che il soffitto della stanza sia tenuto in piedi da un pilastro perfettamente riflettente, a quattro lati. Il mapping della trama della mappa dell'ambiente al pilastro è semplice; rendere il pilastro sembra come se riflette le lettere e i colori non è così facile. Il diagramma seguente mostra una cornice di filo del pilastro con le coordinate di trama applicabili elencate vicino ai vertici superiori. La cucitura in cui il wrapping attraverserà i bordi della trama viene visualizzato con una linea tratteggiata.

diagramma di un rettangolo con una linea punteggiata bisecting

Con il wrapping abilitato nella direzione u, il pilastro con trama mostra i colori e i simboli della mappa dell'ambiente in modo appropriato e, nella parte anteriore della trama, il rasterizzatore sceglie correttamente il percorso più breve tra le coordinate della trama, presupponendo che le coordinate u 0.0 e 1.0 condividono la stessa posizione. Il pilastro con trama è simile alla figura seguente.

illustrazione di un pilastro costituito da quadranti rosso, verde, blu e giallo

Se la disposizione delle trame non è abilitata, il rasterizzatore non esegue l'interpolazione nella direzione necessaria per generare un'immagine credibile e riflessa. L'area all'inizio del pilastro contiene invece una versione compressa orizzontalmente dei texel tra le coordinate u 0,175 e 0,875, mentre passano attraverso il centro della trama. L'effetto di ritorno a capo è rovinato.

Uso della disposizione delle trame

Per abilitare il wrapping delle trame, chiamare il metodo IDirect3DDevice9::SetRenderState , come illustrato nell'esempio di codice seguente.

d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);

Il primo parametro accettato da IDirect3DDevice9::SetRenderState è uno stato di rendering da impostare. Specificare uno dei D3DRS_WRAP0 tramite D3DRS_WRAP7 valori enumerati che specificano il livello di trama per cui impostare il wrapping. Specificare il D3DWRAPCOORD_0 tramite D3DWRAPCOORD_3 flag nel secondo parametro per abilitare la disposizione della trama nella direzione corrispondente o combinarli per abilitare il wrapping in più direzioni. Se si omette un flag, il wrapping delle trame nella direzione corrispondente è disabilitato. Per disabilitare la disposizione delle trame per un set di coordinate della trama, impostare il valore per lo stato di rendering corrispondente su 0.

Non confondere la disposizione delle trame con le modalità di indirizzamento delle trame denominate in modo analogo. La disposizione delle trame viene eseguita prima dell'indirizzamento delle trame. Assicurarsi che i dati di wrapping della trama non contengano coordinate di trama esterne all'intervallo di [0,0, 1,0] perché produrranno risultati non definiti. Per altre informazioni sull'indirizzamento delle trame, vedere Modalità di indirizzamento delle trame (Direct3D 9).

Disposizione mappa di spostamento

Le mappe di spostamento vengono interpolate dal motore a mosaico. Poiché non è possibile specificare la modalità di ritorno a capo per il motore a mosaico, non è possibile eseguire il wrapping delle trame con le mappe di spostamento. Un'applicazione è in grado di usare un set di vertici che forza l'interpolazione a capo in qualsiasi direzione. L'applicazione può anche specificare l'interpolazione da eseguire come semplice interpolazione lineare.

Trame Direct3D