全部源码不方便给出,只给一部分好了D3DLIGHT9 dir; ZeroMemory(&dir, sizeof(dir)); dir.Type = D3DLIGHT_POINT; dir.Diffuse = D3DXCOLOR(1.0f,1.0f,1.0f,1.0f); dir.Specular = D3DXCOLOR(0.3f,0.3f,0.3f,1.0f); dir.Ambient = D3DXCOLOR(0.6f,0.6f,0.6f,1.0f); dir.Position = D3DXVECTOR3(5.0f, 5.0f, 5.0f); tdevice->SetLight(0, &dir); tdevice->LightEnable(0, true);//灯光(白色的)D3DMATERIAL9 mtrl; mtrl.Ambient = D3DXCOLOR(1.0f,1.0f,1.0f,1.0f); mtrl.Diffuse = D3DXCOLOR(1.0f,1.0f,1.0f,1.0f); mtrl.Specular = D3DXCOLOR(1.0f,1.0f,1.0f,1.0f); mtrl.Emissive = D3DXCOLOR(0.0f,0.0f,0.0f,0.0f); mtrl.Power = 5.0f;//材质(白色的)device->SetRenderState(D3DRS_LIGHTING, true); device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); device->SetRenderState(D3DRS_NORMALIZENORMALS, true); device->SetRenderState(D3DRS_SPECULARENABLE, true);//设备设置NormalVertex* vdb=new NormalVertex[12]; vdb[0] = NormalVertex(-1.0f, 0.0f, -1.0f, 0.0f, 0.707f, -0.707f); vdb[1] = NormalVertex( 0.0f, 1.0f, 0.0f, 0.0f, 0.707f, -0.707f); vdb[2] = NormalVertex( 1.0f, 0.0f, -1.0f, 0.0f, 0.707f, -0.707f); vdb[3] = NormalVertex(-1.0f, 0.0f, 1.0f, -0.707f, 0.707f, 0.0f); vdb[4] = NormalVertex( 0.0f, 1.0f, 0.0f, -0.707f, 0.707f, 0.0f); vdb[5] = NormalVertex(-1.0f, 0.0f, -1.0f, -0.707f, 0.707f, 0.0f); vdb[6] = NormalVertex( 1.0f, 0.0f, -1.0f, 0.707f, 0.707f, 0.0f); vdb[7] = NormalVertex( 0.0f, 1.0f, 0.0f, 0.707f, 0.707f, 0.0f); vdb[8] = NormalVertex( 1.0f, 0.0f, 1.0f, 0.707f, 0.707f, 0.0f); vdb[9] = NormalVertex( 1.0f, 0.0f, 1.0f, 0.0f, 0.707f, 0.707f); vdb[10] = NormalVertex( 0.0f, 1.0f, 0.0f, 0.0f, 0.707f, 0.707f); vdb[11] = NormalVertex(-1.0f, 0.0f, 1.0f, 0.0f, 0.707f, 0.707f);//顶点数组(模型显示正确的,在Lock方法和Unlock方法中的)class Vertex{public: Vertex(float _x=0, float _y=0, float _z=0); float x, y, z; static const DWORD FVF;};Vertex::Vertex(float _x, float _y, float _z):x(_x),y(_y),z(_z){};const DWORD Vertex::FVF=D3DFVF_XYZ;class NormalVertex:public Vertex{public: float nx, ny, nz; static const DWORD FVF; NormalVertex(float _x=0, float _y=0, float _z=0, float _nx=0, float _ny=0, float _nz=0);};NormalVertex::NormalVertex(float _x, float _y, float _z, float _nx, float _ny, float _nz):Vertex(_x,_y,_z),nx(_nx),ny(_ny),nz(_nz){};const DWORD NormalVertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL;//顶点结构/**/ FaceNum=4; /**/ device->SetMaterial(Material); device->SetStreamSource(0,VertexBuffer,0,sizeof(NormalVertex)); device->SetFVF(NormalVertex::FVF); device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, FaceNum);//绘制代码有可能哪儿出问题呢?材质和灯光都是白色但是显示却是绿色和蓝色,总之很怪。解决了追加分啊~呵呵~多谢提醒啊~那是笔误~应是:/**/ FaceNum=4; /**/ device->SetMaterial(&mtrl); device->SetStreamSource(0,VertexBuffer,0,sizeof(NormalVertex)); device->SetFVF(NormalVertex::FVF); device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, FaceNum);