本文是在上一篇的基础上做一些锦上添花的事:为物体添加色彩
原理:在设置顶点格式的时候给其一个色彩分量D3DFVF_DIFFUSE
这里重点介绍一下Diret3D里的常用灵活顶点格式
1.D3DFVF_DIFFUSE指示顶点具有颜色(DWORD,ARGB顺序)
2.D3DFVF_NORMAL指示顶点具有法向量(float nx,ny,nz)
3.D3DFVF_XYZ指示顶点坐标(float x,y,z)
4.D3DFVF_TEX1到D3DFVF_TEX8指示顶点的纹理坐标,用于贴图
必须遵循特定的定义顺序:三维坐标->法向量->颜色->纹理坐标
上次的顶点格式只为其指定了三维坐标:灵活顶点格式为D3DFVF_XYZ
//自定义顶点格式
typedef struct VERTEX
{
FLOAT _x,_y,_z;//三维坐标
VERTEX(FLOAT x,FLOAT y,FLOAT z)
:_x(x),_y(y),_z(z){}
const static DWORD FVF;//格式
}VERTEX;
const DWORD VERTEX::FVF=D3DFVF_XYZ;
此次我们只为顶点添加了色彩分量,以下即为顶点数据结构:灵活顶点格式为D3DFVF_XYZ|D3DFVF_DIFFUSE
//自定义顶点格式
typedef struct VERTEX
{
FLOAT _x,_y,_z;//三维坐标
DWORD _color;//顶点颜色
VERTEX(FLOAT x,FLOAT y,FLOAT z,DWORD color)
:_x(x),_y(y),_z(z),_color(color){}
const static DWORD FVF;//格式
}VERTEX;
const DWORD VERTEX::FVF=D3DFVF_XYZ|D3DFVF_DIFFUSE;
在顶点初始化时使用宏D3DCOLOR_XRGB(r,g,b)设置颜色,如:
pVertices[0]=VERTEX(-1.0F,1.0F,1.0F,D3DCOLOR_XRGB(255,0,0));
另外,在Setup时要设置绘制状态将光照关闭,否则仍为黑色
//关闭光照,否则仍为黑色
g_pd3dDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
详细代码可以参考上一篇或者下载本次的工程文件。
源代码及工程文件下载地址: