|
|
发表于 2007-1-23 10:41:00
|
显示全部楼层
我帮大家粘贴上来(HWBNET说过的资料)
创建立体纹理
以下示例代码显示了使用立体纹理所需的步骤。
首先,定义一个包含三个纹理坐标的自定义顶点类型,如以下示例代码所示。
struct VOLUMEVERTEX
{
FLOAT x, y, z;
DWORD color;
FLOAT tu, tv, tw;
};
#define D3DFVF_VOLUMEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|
D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0))
然后,把数据填入顶点。
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 }
};
现在,创建一个顶点缓存,并填入顶点数据。
下一步是用IDirect3DDevice9::CreateVolumeTexture创建一个立体纹理,如以下示例代码所示。
LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture;
d3dDevice->CreateVolumeTexture( 8, 4, 4, 1, 0, D3DFMT_R8G8B8,D3DPOOL_MANAGED,
&pVolumeTexture );
在渲染图元之前,把当前纹理设为前面创建的立体纹理。以下示例代码显示了渲染一个三角形带的整个过程。
if( SUCCEEDED( d3dDevice->BeginScene() ) )
{
// 用立体纹理绘制四边形。
d3dDevice->SetTexture( 0, pVolumeTexture );
d3dDevice->SetFVF( D3DFVF_VOLUMEVERTEX );
d3dDevice->SetStreamSource( 0, pVB, sizeof(VOLUMEVERTEX) );
d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);
// 结束绘制。
d3dDevice->EndScene();
}
|
|