今天项目里突然要用到广告版技术。闲来就去摆渡搜索一下,发现这一方面的介绍很少,所以才有了今天这篇文章,也是为了服务于新手,更为了锻炼一下自己,现在把BillBoard技术详细的介绍一下。废话不说,下面进入正题!
一:定义广告版矩形顶点结构和顶点格式,具体代码如下:
struct customvertrx
{
float x,y,z;//顶点位置
float u ,v;//定义顶点纹理坐标
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)
二:创建广告版矩形和纹理对象。
//以下为创建你需要做广告版的顶点缓冲区
V_RETURN(pd3dDevice->CreateVertexBuffer(4*sizeof(CUSTOMVERTEX,0,D3DFVF_CUSTOMVERTEX,
D3DPOOL_MANAGED,&g_pTreeVB,NULL));
CUSTOMVERTEX vertices2[] =
{
{-1.0f,0.0f,0.0f,0.0f,1.0f,},
{-1.0f,2.5f,0.0f,0.0f,0.0f,},
{1.0f,0.0f,0.0f,1.0f,1.0f,},
{1.0f,2.5f,0.0f,1.0f,0.0f,},
};
VOID* pVertices2;
if(FAILED(g_pTreeVB->Lock(0,sizeof(vertices2),(void**)&pVertices2,0)))
return E_FAIL;
memcpy(pVertices2,vertices2,sizeof(vertices2));
g_pTreeVB->Unlock();
//创建所需做广告版的纹理
V_RETURN (D3DXCreateTextureFromFile(pd3dDevice,L"图片名字.bmp",&g_pTreeTex));
三
接下来就是设置一些Alpha混合系数了,这些代码我的Blog前一章已经介绍过了,这里就不仔细说明了
四
这一布尤为重要了,我们要根据观察的方向来广告版矩阵,通过旋转矩阵对象使它面向观察者。
D3DXVECTOR3 vDir = vLookatpt - vEyePt;
if(vDir.x>0.0f)
D3DXMatrixRotationY(&matBillBoard,-atanf(vDir.z/vDir.x)+D3DX_PI2);
else
D3DXMatrixRotationY(&matBillBoard,-atanf(vDir.z/vDir.x)-D3DX_PI2);
//广告版矩阵和你的图片矩阵做乘积
g_matTree = matBillBoard*matTree;
以上就是广告版的具体实现,请读者不要复制代码到编译器里,因为这是我在记事本里写的没通过编译难免会有错误!