Birim Doku Kaynakları (Direct3D 9)
Birim dokuları, üçgen veya çizgi gibi iki boyutlu bir temel öğeyi boyamak için kullanılabilen üç boyutlu piksel koleksiyonlarıdır (texels). Bir birimle dokulanacak bir temel öğenin her köşesi için üç öğeli doku koordinatları gerekir. İlkel çizilirken, iki boyutlu doku durumuna benzer kurallara uygun olarak, içindeki her piksel birim içindeki bir pikselin renk değeriyle doldurulur. Birimler, bunlarla boyanabilecek üç boyutlu temel öğeler olmadığından doğrudan işlenmez.
Yamalı sis, patlamalar vb. gibi özel efektler için hacim dokularını kullanabilirsiniz.
Birimler dilimler halinde düzenlenir ve genişlik x yükseklik x derinlik hacmi yapmak için yığılmış genişlik x yükseklik 2B yüzey olarak düşünülebilir. Her dilim tek bir satırdır. Birimler, her düzeyin boyutlarının önceki düzeyin boyutlarının yarısına yuvarlandığı sonraki düzeylere sahip olabilir. Aşağıdaki diyagramda birden çok düzeye sahip bir birim dokusunun nasıl göründüğü gösterilmektedir.
Birim Dokusu Oluşturma
Aşağıdaki kod örneklerde birim dokusunu kullanmak için gereken adımlar gösterilmektedir.
İlk olarak, bu kod örneğinde gösterildiği gibi her köşe için üç doku koordinatı olan özel bir köşe türü belirtin.
struct VOLUMEVERTEX
{
FLOAT x, y, z;
DWORD color;
FLOAT tu, tv, tw;
};
#define D3DFVF_VOLUMEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|
D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0))
Ardından köşeleri verilerle doldurun.
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 }
};
Şimdi bir köşe arabelleği oluşturun ve köşelerden alınan verilerle doldurun.
Sonraki adım, bu kod örneğinde gösterildiği gibi birim dokusu oluşturmak için IDirect3DDevice9::CreateVolumeTextureyöntemini kullanmaktır.
LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture;
d3dDevice->CreateVolumeTexture( 8, 4, 4, 1, 0, D3DFMT_R8G8B8,D3DPOOL_MANAGED,
&pVolumeTexture );
temel öğeyi işlemeden önce geçerli dokuyu yukarıda oluşturulan birim dokusuna ayarlayın. Aşağıdaki kod örneği, bir üçgen şeridi için işleme işleminin tamamını gösterir.
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();
}
İlgili konular