使用D3DFVF_XYZ加上,世界变换等,就是画不出来三角形,因为刚接触DirectX不久,
请各位帮帮忙,本人用的是DirectX9.0、VS2008开发,编译无错误,运行后,一片黑漆漆,没有三角形代码如下:#include "windows.h"
#include <d3d9.h>
#include <d3dx9.h>#define WINDOW_WIDTH 1024
#define WINDOW_HEIGHT 768
#define WINDOW_CLSNAME L"PlayThePlane"  //主窗口类名
#define SAFE_RELEASE(p){if(p){(p)->Release();(p)==NULL;}}
#define SAFE_DELETE(p){if(p){delete p;p=NULL;}}//背景顶点格式
struct BACKVERTEX
{
float x,y,z;
float u,v;
};
#define D3DFVF_BACKVERTEX D3DFVF_XYZ|D3DFVF_TEX1HWND hwnd=NULL;  //主窗体句柄
LPDIRECT3DDEVICE9 g_pd3dDevice; //DirectX3D设备指针 LPDIRECT3DVERTEXBUFFER9 g_pVertexBuffer;  //顶点缓存对象 用于绘制精灵
LPDIRECT3DINDEXBUFFER9  g_pIndexBuffer;   //索引缓存对象 用于绘制精灵
LPDIRECT3DTEXTURE9 g_pTexture;  //纹理接口对象 用于绘制精灵DWORD tPre,tNow; //用于帧频控制
//消息处理函数声明
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam); bool RegisterWindow(HINSTANCE hInstance);  //注册窗体类函数声明
HRESULT InitD3D(); //初始化DirectX函数声明
HRESULT InitObject();
void Render(); //渲染函数声明 
void Clear(HINSTANCE hInstance); //清理资源函数声明//主函数
int WINAPI WinMain(HINSTANCE hInstance, 
   HINSTANCE hPrevInstance,
   LPSTR lpCmdLine, 
   int nShowCmd)  
{
    if(!RegisterWindow(hInstance))
return -1; hwnd=CreateWindow(WINDOW_CLSNAME,L"炮打大飞机",
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
WINDOW_WIDTH,WINDOW_HEIGHT,NULL,NULL,hInstance,NULL); if(hwnd==NULL)
return -1; MoveWindow(hwnd,100,100,WINDOW_WIDTH,WINDOW_HEIGHT,true);
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);    if(InitD3D()!=S_OK)
return -1;
MSG msg={0};
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
tNow=GetTickCount(); if(tNow-tPre>30)
{
     Render();
}
}
}    Clear(hInstance); return 0;
}//注册窗体类函数定义
bool RegisterWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass={0};
    wndClass.cbSize     =sizeof(WNDCLASSEX);
wndClass.style      =CS_HREDRAW|CS_VREDRAW;
wndClass.lpfnWndProc=WndProc;
wndClass.cbClsExtra =0;
wndClass.cbWndExtra =0;
wndClass.hIconSm    =0;
wndClass.hInstance  =hInstance;
wndClass.hCursor    =LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wndClass.lpszMenuName=NULL;
wndClass.lpszClassName=WINDOW_CLSNAME;    if(!RegisterClassEx(&wndClass))
return false;    return true;
}//消息处理函数定义
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    switch(message)
{
case WM_KEYDOWN:
if(wParam==VK_ESCAPE)
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break; default:
return DefWindowProc(hwnd,message,wParam,lParam);
} return 0;
}
//初始化DirectX函数定义
HRESULT InitD3D()
{
LPDIRECT3D9 pD3D=NULL;
    if(NULL==(pD3D=Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL; D3DCAPS9 caps;
int vp=0; if(FAILED(pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps)))
return E_FAIL; if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT)
vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING; D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.BackBufferWidth    = WINDOW_WIDTH;
d3dpp.BackBufferHeight   = WINDOW_HEIGHT;
d3dpp.BackBufferFormat   = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount    = 1;
d3dpp.MultiSampleType    = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect         = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow      = hwnd;
d3dpp.Windowed           = true;
d3dpp.EnableAutoDepthStencil= true;
d3dpp.AutoDepthStencilFormat= D3DFMT_D24S8;
d3dpp.Flags              = 0;
d3dpp.FullScreen_RefreshRateInHz= 0;
d3dpp.PresentationInterval= D3DPRESENT_INTERVAL_IMMEDIATE; if(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,hwnd,vp,&d3dpp,&g_pd3dDevice)))
return E_FAIL;
InitObject(); SAFE_RELEASE(pD3D); return S_OK;
}
HRESULT InitObject()
{
//创建顶点缓存   
    if( FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(BACKVERTEX),  
           0, D3DFVF_BACKVERTEX,  
           D3DPOOL_DEFAULT, &g_pVertexBuffer, NULL ) ) )  
{  
          return E_FAIL;  
    }      // 创建索引缓存   
    if( FAILED(g_pd3dDevice->CreateIndexBuffer(3*sizeof(WORD), 0,   
        D3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuffer, NULL)) )  
    {  
        return E_FAIL;  
    }   //以下为设置顶点数据
BACKVERTEX Vertices[4];
Vertices[0].x=-1.0f;
Vertices[0].y=0.0f;
Vertices[0].z=0.0f;
//Vertices[0].rhw=1.0f;
Vertices[0].u=0.0f;
Vertices[0].v=0.0f; Vertices[1].x=0.0f;
Vertices[1].y=1.0f;
Vertices[1].z=0.0f;
//Vertices[1].rhw=1.0f;
Vertices[1].u=1.0f;
Vertices[1].v=0.0f; Vertices[2].x=1.0f;
Vertices[2].y=0.0f;
Vertices[2].z=0.0f;
//Vertices[2].rhw=1.0f;
Vertices[2].u=0.0f;
Vertices[2].v=1.0f; //Vertices[3].x=1.0f;
//Vertices[3].y=1.0f;
//Vertices[3].z=1.0f;
// //Vertices[3].rhw=1.0f;
//Vertices[3].u=1.0f;
//Vertices[3].v=1.0f;    VOID* pVertices;
if(FAILED(g_pVertexBuffer->Lock(0,sizeof(Vertices),(void**)&pVertices,0)))
return E_FAIL;
memcpy(pVertices,Vertices,sizeof(Vertices));
g_pVertexBuffer->Unlock(); //填充索引缓存
WORD Indices[]={0,1,2};    WORD* pIndices=NULL;
if(FAILED(g_pIndexBuffer->Lock(0,0,(void**)&pIndices,0)))
return E_FAIL;
memcpy(pIndices,Indices,sizeof(Indices));
g_pIndexBuffer->Unlock(); D3DXCreateTextureFromFile(g_pd3dDevice,L"plane.jpg",&g_pTexture);  //创建纹理 return S_OK;
}
//渲染函数定义
void Render()
{
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
g_pd3dDevice->BeginScene();
D3DXMATRIX matWorld,matScaling, matLook,matProj; D3DXMatrixTranslation(&matWorld,30.0f,30.0f,0.0f);    D3DXMatrixScaling(&matScaling,32.0f,32.0f,0.0f);
matWorld=matWorld*matScaling;    D3DXMatrixPerspectiveFovLH(&matProj,3.14*0.5f,800.0f/600.0f,1.0f,1000.0f);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj); g_pd3dDevice->SetTransform(D3DTS_WORLD,&matWorld); D3DXVECTOR3 position(0.0f,0.0f,-10.0f);
D3DXVECTOR3 targetPoint(0.0f,0.0f,0.0f);
D3DXVECTOR3 worldUp(0.0f,1.0f,0.0f); D3DXMatrixLookAtLH(&matLook,&position,&targetPoint,&worldUp);
g_pd3dDevice->SetTransform(D3DTS_VIEW,&matLook); g_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);    g_pd3dDevice->SetStreamSource(0,g_pVertexBuffer,0,sizeof(BACKVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_BACKVERTEX);
g_pd3dDevice->SetIndices(g_pIndexBuffer);
g_pd3dDevice->SetTexture(0,g_pTexture);
g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,3,0,1); g_pd3dDevice->EndScene();
g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
tPre=GetTickCount();
}
//清理资源函数定义
void Clear(HINSTANCE hInstance)
{
UnregisterClass(WINDOW_CLSNAME,hInstance);
SAFE_RELEASE(g_pd3dDevice);
}DirectX