struct CUSTOMVERTEX
{
 float x,y,z;
 Dword colour;
}#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ_DIFFUSE)HRESULT InitialiseVertexBuffer()
{
 void* pVertices;
 //存储立方体中每个顶点和其颜色
 //确保多边形顶点是按顺时针方向排列的
 //逆时针面将被剔除
   CUSTOMVERTEX cvVertices[]=
   {
//顶面
   {-5.0f,5.0f,-5.0f,D3DCOLOR_XRGB(0,0,255);};//Vertex 0 -blue
   {-5.0f,5.0f,5.0f,D3DCOLOR_XRGB(255,0,0);};//Vertex 1 -red
       {5.0f,5.0f,-5.0f,D3DCOLOR_XRGB(255,0,0);};//Vertex 2 -red
   {5.0f,5.0f,5.0f,D3DCOLOR_XRGB(0,255,0);};//Vertex 3 -green
 
   //侧面1
   {-5.0f,-5.0f,-5.0f,D3DCOLOR_XRGB(255,0,0);};//Vertex 4 -red
   {-5.0f,5.0f,-5.0f,D3DCOLOR_XRGB(0,0,255);};//Vertex 5 -blue
       {5.0f,-5.0f,-5.0f,D3DCOLOR_XRGB(0,255,0);};//Vertex 6 -green
   {5.0f,5.0f,-5.0f,D3DCOLOR_XRGB(255,0,0);};//Vertex 7 -red   //侧面2
   {5.0f,-5.0f,5.0f,D3DCOLOR_XRGB(0,0,255);};//Vertex 8 -blue
   {5.0f,5.0f,5.0f,D3DCOLOR_XRGB(0,255,0);};//Vertex 9 -green   //侧面3
       {-5.0f,-5.0f,5.0f,D3DCOLOR_XRGB(0,255,0);};//Vertex 10 -green
   {-5.0f,5.0f,5.0f,D3DCOLOR_XRGB(255,0,0);};//Vertex 11 -red   //侧面4
       {-5.0f,-5.0f,-5.0f,D3DCOLOR_XRGB(255,0,0);};//Vertex 12 -red
   {-5.0f,5.0f,-5.0f,D3DCOLOR_XRGB(0,0,255);};//Vertex 13 -blue   //底面
       {5.0f,-5.0f,-5.0f,D3DCOLOR_XRGB(0,255,0);};//Vertex 14 -green
   {5.0f,-5.0f,5.0f,D3DCOLOR_XRGB(0,0,255);};//Vertex 15 -blue
   {-5.0f,-5.0f,-5.0f,D3DCOLOR_XRGB(255,0,0);};//Vertex 16 -red
   {-5.0f,-5.0f,5.0f,D3DCOLOR_XRGB(0,255,0);};//Vertex 17 -green
   };   //创建顶点缓冲   if(failed(g_pD3DDevice->CreateVertexBuffer(18 * sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pVertexBuffer)))
   {
   return e_fail;
   }
   //锁住顶点缓冲区   if(failed(g_pVertexBuffer->Lock(0,sizeof(cvVertices),(BYTE**)&pVertices,0)))
   {
   return e_fail;
   }    //在顶点缓冲区中填入顶点数据   memcpy(pVertices,cvVertices,sizeof(cvVertices));
   //解锁顶点缓冲区   g_pVertexBuffer->UnLock();   return S_OK;    }
 void SetupRotation()
 {
   //旋转世界坐标X,Y,Z
   D3DXMATRIX matWorldX,matWorldY,matWorldZ;   //创建变换矩阵
   D3DXMATRIXRotationX(&matWorldX,timeGetTime()/400.0f);
   D3DXMATRIXRotationY(&matWorldY,timeGetTime()/400.0f);
   D3DXMATRIXRotationZ(&matWorldZ,timeGetTime()/400.0f);   //乘以变换矩阵   D3DXMarixMutiply(&matWorld,&matWorldX,&matWorldY);
   D3DXMarixMutiply(&matWorld,&matWorld,&matWorldZ);   //应用变换
   
   g_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld); }
  
void SetupCamera()
{
  //设置照相机
  //照相机有三个设置:相机位置、视点和顶方向
  D3DXMarix matVeiw;
  D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(0.0f,0.0f,-30.0f),&D3DXVECTOR3(0.0f,0.0f,0.0f),&D3DXVECTOR3(0.0f,1.0f,0.0f));
  g_pD3DDevice->SetTransform(D3DTS_VIEW,&matView);}void SetupPerspective()
{
  //这里定义投影视图、比例、近处/远处的裁剪平面
  D3DXMarix matProj
  D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4,1.0f,1.0f,500.0f);
  g_pD3DDevice->SetTransform(D3DTS_PROJECTION,&matProj);}void Render()
{
 if(g_pD3DDevice==null)
 {
   return;
 }
 //清楚后台缓冲为黑色
 g_pD3DDevice->Clear(0,null,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
 //开始场景
 g_pD3DDevice->BeginScene(); //设置旋转,相机和投影矩阵
SetupRotation();
SetupCamera();
SetupPerspective();
//渲染对象
g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer,sizeof(CUSTOMVERTEX));
g_pD3DDevice->SetVertexShader(D3DFVF_CUSTOMVERTEX);
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//top
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,4,8);//sides
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,14,2);//bottom
//终结场景
g_pD3DDevice->EndScence();//交换前后缓冲区
g_pD3DDevice->Present(NULL,NULL,NULL);}
}