BillBoard技术(广告版)详解!(转)

BillBoard技术(广告版)详解!(转)

今天项目里突然要用到广告版技术。闲来就去摆渡搜索一下,发现这一方面的介绍很少,所以才有了今天这篇文章,也是为了服务于新手,更为了锻炼一下自己,现在把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;

以上就是广告版的具体实现,请读者不要复制代码到编译器里,因为这是我在记事本里写的没通过编译难免会有错误!

原文地址:https://www.cnblogs.com/wonderKK/p/2240261.html