Volumetextuurresources (Direct3D 9)
Volume texturen zijn driedimensionale verzamelingen pixels (texels) die kunnen worden gebruikt om een tweedimensionale primitieve te schilderen, zoals een driehoek of een lijn. Coördinaten van het patroon van drie elementen zijn vereist voor elk hoekpunt van een primitieve die met een volume moet worden gepatroont. Terwijl de primitieve wordt getekend, wordt elke ingesloten pixel gevuld met de kleurwaarde van een pixel binnen het volume, in overeenstemming met regels die vergelijkbaar zijn met de tweedimensionale textuurcase. Volumes worden niet rechtstreeks weergegeven omdat er geen driedimensionale primitieven zijn die ermee kunnen worden geschilderd.
U kunt volume texturen gebruiken voor speciale effecten, zoals patchy mist, explosies, enzovoort.
Volumes zijn ingedeeld in segmenten en kunnen worden beschouwd als breedte x hoogte 2D-oppervlakken gestapeld om een breedte x hoogte x dieptevolume te maken. Elk segment is één rij. Volumes kunnen volgende niveaus hebben waarin de dimensies van elk niveau worden afgekapt tot de helft van de dimensies van het vorige niveau. In het volgende diagram ziet u hoe een volumepatroon met meerdere niveaus eruitziet.
Een volumepatroon maken
In de onderstaande codevoorbeelden ziet u de stappen die nodig zijn om een volumepatroon te gebruiken.
Geef eerst een aangepast hoekpunttype op met drie patrooncoördinaten voor elk hoekpunt, zoals wordt weergegeven in dit codevoorbeeld.
struct VOLUMEVERTEX
{
FLOAT x, y, z;
DWORD color;
FLOAT tu, tv, tw;
};
#define D3DFVF_VOLUMEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|
D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0))
Vul vervolgens de hoekpunten in met gegevens.
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 }
};
Maak nu een hoekpuntbuffer en vul deze met gegevens uit de hoekpunten.
De volgende stap is het gebruik van de methode IDirect3DDevice9::CreateVolumeTexture methode om een volumepatroon te maken, zoals wordt weergegeven in dit codevoorbeeld.
LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture;
d3dDevice->CreateVolumeTexture( 8, 4, 4, 1, 0, D3DFMT_R8G8B8,D3DPOOL_MANAGED,
&pVolumeTexture );
Voordat u de primitieve weer geeft, stelt u het huidige patroon in op het volumepatroon dat hierboven is gemaakt. In het onderstaande codevoorbeeld ziet u het volledige renderingproces voor een strook driehoeken.
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();
}
Verwante onderwerpen