在代码中加入以下两条预处理语句:
#include "d3dx9.h" //Driect9.0的头文件
#pragma comment(lib,"d3d9.lib")
初始化DirectX首先要声明以下5个变量:
IDirect3D9 *_d3d9=0; //声明Direct接口指针
D3DCAPS9 caps;//接口性能结构
D3DDEVTYPE devicetype;//设备类型
D3DPRESENT_PARAMETERS d3dpp; //D3D参数结构
IDirect3DDevice9 *device=0; //DirectDevice接口
然后在自定义的初始化函数中加入:
<span style="font-size:18px;">_d3d9=Direct3DCreate9(D3D_SDK_VERSION); //采用默认方式创建D3D接口
if(!_d3d9){
MessageBox(hwnd,"DirectX9.0 接口创建失败!","错误!",MB_ICONERROR);
exit(0);
}
_d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT,devicetype,&caps);
int vp=0;
if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT)
{
vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
MessageBox(hwnd,"支持硬件顶点运算","提示",MB_ICONINFORMATION);
}
else
{
vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;
// MessageBox(hwnd,"支持软件顶点运算","提示",MB_ICONINFORMATION);
}
d3dpp.BackBufferWidth=800; //后台缓存表面宽度,单位为像素
d3dpp.BackBufferHeight=600; //后台缓存表面高度,单位为像素
d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8; //后台缓存像素格式,32位
d3dpp.BackBufferCount=1; //后台缓存的个数为1
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE; //后台采样类型,这里为多重采样
d3dpp.MultiSampleQuality=0; //后台缓存采样质量,这里为默认
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; //后天缓存置换页面的方式,这里的为效率最高的方式
d3dpp.hDeviceWindow=hwnd; //指定要绘制的窗口
d3dpp.Windowed=false; //这里为全屏
d3dpp.EnableAutoDepthStencil=true; //自动创建深度缓存或者模板缓存
d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8; //深度缓存或者模板缓存的像素格式,这里为24位深度8未作为模板缓存
d3dpp.Flags=0; // 是否丢弃深度缓存或者模板缓存,这里默认为丢弃
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT; //显示器刷新的频率,采用默认
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE; //提交页面的方式,这里为立即提交
HRESULT hr=_d3d9->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&device);
if(FAILED(hr))
{
MessageBox(hwnd,"创建设备失败","错误!",MB_ICONERROR);
exit(0);
} </span>
然后在主函数中调用初始化函数便可得到初始化结果。