包含头文件
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
定义结构体
struct MyStruct
{
float x, y, z;
DWORD dwColor;
FLOAT tu, tv;//纹理坐标
};
定义变量:
IDirect3D9 *pDirect9;
IDirect3DDevice9 *pDevice9;
IDirect3DVertexBuffer9 *m_pVB;
IDirect3DTexture9 *pTexture9;
使用类向导添加WM_CLOSE,WM_TIMER.
在OnInitDialog()里面添加
pDirect9 = Direct3DCreate9(D3D_SDK_VERSION);
if (pDirect9){
D3DPRESENT_PARAMETERS dp;
memset(&dp, 0, sizeof(dp));
dp.Windowed = TRUE;
dp.SwapEffect = D3DSWAPEFFECT_DISCARD;
dp.BackBufferFormat = D3DFMT_UNKNOWN;
dp.EnableAutoDepthStencil = TRUE;
dp.AutoDepthStencilFormat = D3DFMT_D16;
pDirect9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &dp, &pDevice9);
// Turn off culling
pDevice9->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
// Turn off D3D lighting
pDevice9->SetRenderState(D3DRS_LIGHTING, FALSE);
// Turn on the zbuffer
pDevice9->SetRenderState(D3DRS_ZENABLE, TRUE);
MyStruct Vertices[] =
{
{ -1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 0, 1 }, // x, y, z, rhw, color,tu,tv
{ -1.0f, 1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 0, 0 },
{ 1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 1, 1 },
{ 1.0f, 1.0f, 0.0f, D3DCOLOR_XRGB(255, 255, 255), 1, 0 },
};
HRESULT hr = D3DXCreateTextureFromFile(pDevice9, L"F:\\nn\\1.jpg", &pTexture9);
pDevice9->CreateVertexBuffer(4 * sizeof(MyStruct), 0, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1, D3DPOOL_DEFAULT, &m_pVB, NULL);
void *pData;
m_pVB->Lock(0, sizeof(Vertices), &pData, 0);
memcpy(pData, Vertices, sizeof(Vertices));
m_pVB->Unlock();
}
SetTimer(0, 100, NULL);
定时器映射函数:
if (pDevice9){
pDevice9->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00FF0000, 1.0f, 0);
pDevice9->BeginScene();
pDevice9->SetTexture(0, pTexture9);
pDevice9->SetStreamSource(0, m_pVB, 0, sizeof(MyStruct));
pDevice9->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
pDevice9->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
pDevice9->EndScene();
pDevice9->Present(0, NULL, m_hWnd, NULL);
}
退出映射函数:
if (pDirect9){
pDirect9->Release();
}
if (pDevice9){
pDevice9->Release();
}
if (pTexture9){
pTexture9->Release();
}
KillTimer(0);
运行效果: