Risorse trama volume (Direct3D 9)
Le trame del volume sono raccolte tridimensionali di pixel (texel) che possono essere usate per disegnare una primitiva bidimensionale, ad esempio un triangolo o una linea. Le coordinate della trama a tre elementi sono necessarie per ogni vertice di una primitiva che deve essere tramata con un volume. Poiché la primitiva viene disegnata, ogni pixel contenuto viene riempito con il valore di colore di alcuni pixel all'interno del volume, in base alle regole simili al caso di trama bidimensionale. I volumi non vengono visualizzati direttamente perché non sono presenti primitive tridimensionali che possono essere dipinte con loro.
È possibile usare trame di volume per effetti speciali, ad esempio nebbia patchy, esplosione e così via.
I volumi sono organizzati in sezioni e possono essere considerati come superfici di larghezza x altezza 2D in pila per rendere un volume di larghezza x altezza x profondità. Ogni sezione è una singola riga. I volumi possono avere livelli successivi in cui le dimensioni di ogni livello vengono troncate a metà delle dimensioni del livello precedente. Il diagramma seguente mostra come sembra una trama del volume con più livelli.
Creazione di una trama del volume
Gli esempi di codice seguenti illustrano i passaggi necessari per usare una trama del volume.
Specificare innanzitutto un tipo di vertice personalizzato con tre coordinate di trama per ogni vertice, come illustrato in questo esempio di codice.
struct VOLUMEVERTEX
{
FLOAT x, y, z;
DWORD color;
FLOAT tu, tv, tw;
};
#define D3DFVF_VOLUMEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|
D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0))
Compilare quindi i vertici con i dati.
VOLUMEVERTEX g_vVertices[4] =
{
{ 1.0f, 1.0f, 0.0f, 0xffffffff, 1.0f, 1.0f, 0.0f },
{-1.0f, 1.0f, 0.0f, 0xffffffff, 0.0f, 1.0f, 0.0f },
{ 1.0f,-1.0f, 0.0f, 0xffffffff, 1.0f, 0.0f, 0.0f },
{-1.0f,-1.0f, 0.0f, 0xffffffff, 0.0f, 0.0f, 0.0f }
};
Creare ora un buffer dei vertici e riempirlo con i dati dai vertici.
Il passaggio successivo consiste nell'usare il metodo IDirect3DDevice9::CreateVolumeTexture per creare una trama del volume, come illustrato in questo esempio di codice.
LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture;
d3dDevice->CreateVolumeTexture( 8, 4, 4, 1, 0, D3DFMT_R8G8B8,D3DPOOL_MANAGED,
&pVolumeTexture );
Prima di eseguire il rendering della primitiva, impostare la trama corrente sulla trama del volume creata in precedenza. L'esempio di codice seguente mostra l'intero processo di rendering per una striscia di triangoli.
if( SUCCEEDED( d3dDevice->BeginScene() ) )
{
// Draw the quad, with the volume texture.
d3dDevice->SetTexture( 0, pVolumeTexture );
d3dDevice->SetFVF( D3DFVF_VOLUMEVERTEX );
d3dDevice->SetStreamSource( 0, pVB, sizeof(VOLUMEVERTEX) );
d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);
// End the scene.
d3dDevice->EndScene();
}
Argomenti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per