FVF(Flexible Vertex Format) 是Direct3d中的可变顶点格式,通过它可以定义三角形的顶点格式,然后通过创建顶点缓冲区并设置渲染源来显示基本的图形。
D3DFVF_XYZ的代码可以这样:
struct CUSTOMVERTEX
{
FLOAT x, y, z;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)
CUSTOMVERTEX Vertices[] =
{
{ -1,-1,0,}, { 0,1,0,}, { 1,-1,0,},
};
D3DFVF_XYZRHW的代码是这样的:
struct CUSTOMVERTEX
{
float x,y,z;
DWORD color;
};
#define D3DFVF_CUSTOMERVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
CUSTOMVERTEX vertices [ ]={
{ 0.0f,100.0f, 0.0f, 1.0f,0xffff0000},
{ 200.0f,100.0f, 0.0f,1.0f, 0xff0000ff},
{ 100.0f,300.0f, 0.0f, 1.0f,0xffffffff, }
};
使用的是2-D图形,就指定2D屏幕坐标,如果使用的是本地或者世界空间的坐标,就能指定3d中的坐标。
FVF所有适合的标志如下:
D3DFVF_XYZ 3D
D3DFVF_XYZRHW 2D
DEDFVF_NORMAL 包含法线
D3DFVF_DIFFUSE 包含漫反射分量
D3DFVF_TEX1 包含一个纹理坐标对
D3DFVF_XYZ和D3DFVF_XYZRHW的区别是:
1.D3DXYZ默认的坐标系统用户区中心是 (0,0) 而rhw的是左上角 (0,0)
2.D3DXYZ默认的非光照的,而RHW默认就是高洛夫的光照模式。
D3DFVF_XYZ的代码可以这样:
struct CUSTOMVERTEX
{
FLOAT x, y, z;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)
CUSTOMVERTEX Vertices[] =
{
{ -1,-1,0,}, { 0,1,0,}, { 1,-1,0,},
};
D3DFVF_XYZRHW的代码是这样的:
struct CUSTOMVERTEX
{
float x,y,z;
DWORD color;
};
#define D3DFVF_CUSTOMERVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
CUSTOMVERTEX vertices [ ]={
{ 0.0f,100.0f, 0.0f, 1.0f,0xffff0000},
{ 200.0f,100.0f, 0.0f,1.0f, 0xff0000ff},
{ 100.0f,300.0f, 0.0f, 1.0f,0xffffffff, }
};