D3D-从顶点到几何体
在计算机3D世界中,所有的物体都是通过多边形进行表示的,而多边形又是由点来存储。
顶点缓冲适用于存放定点的内存块。
灵活顶点格式(FVF,Flexible Vertex Format)适用于描述顶点属性的一种格式,可以自定义。
1 灵活顶点格式
定义顶点结构体。
struct Vertex
{
float x, y, z; // Position of vertex in 3D space
DWORD color; // Color of vertex
};
定义顶点属性的宏。
#define D3DFVF_MY_VERTEX ( D3DFVF_XYZ | D3DFVF_DIFFUSE )
2 创建顶点缓冲
使用CreateVertexBuffer函数创建顶点缓冲,然后将数据存入顶点缓冲区内。
g_pd3dDevice->CreateVertexBuffer( 6*sizeof(Vertex), 0, 3DFVF_MY_VERTEX,
D3DPOOL_DEFAULT, &g_pLineStrip_VB,
NULL );
pVertices = NULL;
g_pLineStrip_VB->Lock( 0, 0, (void**)&pVertices, 0 );
memcpy( pVertices, g_lineStrip, sizeof(g_lineStrip) );
g_pLineStrip_VB->Unlock();
3 绘制多边形
通过存储的顶点缓冲绘制多边形,首先使用SetStreamSource设置多边形的顶点缓冲区。 然后SetFVF设置顶点格式,最后就可以使用DrawPrimitive绘制多边形。
g_pd3dDevice->SetStreamSource( 0, g_pPointList_VB, 0, sizeof(Vertex) );
g_pd3dDevice->SetFVF( D3DFVF_MY_VERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 5 );
4 图元
在使用DrawPrimitive时,需要设置图元类型,这样D3D才知道根据输入的顶点流绘制什么样的多边形。
图元类型有三种:点、线和三角形。
点:D3DPT_POINTLIST
线:D3DPTLINELIST,D3DPTLINESTRIP
三角形: D3DPTTRIANGLELIST,D3DPTTRIANGLESTRIP,D3DPT_TRIANGLEFAN
绘制图元的时候是左手坐标系,只可以从法线方向可以看到图元