D3D-初始化Direct3D设备
一个Direct3D(D3D)设备,可以理解为指向显卡的指针,对其初始化以后,我们可以通过D3D设备操作显卡。
初始化D3D设备的总体步骤
- 创建一个D3D指针,用于获得显卡的相关信息并且创建一个D3D设备接口。
- 检测设备的相关性能。
- 初始化一个
D3DPRESENT_PARAMETERS
实例,这个结构包含要创建的D3D设备接口的特性。 - 根据
D3DPRESENT_PARAMETERS
,创建一个D3D设备的指针,指向想要绘制3D图形的显卡设备。
参考程序:http://www.codesampler.com/dx9src/dx9src1.htm#dx9initialization
创建D3D接口
IDirect3D9 * g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
IDirect3D9有两个用途:检测设备性能和创建D3D设备对象。
检测设备性能
当创建IDirect3DDevice9对象表示主显示设备时,需要设定顶点处理类型。顶点处理有两种,分别是硬件顶点处理(速度更快,但并非所有显卡都支持),以及软件顶点处理。因此,需要检测设备性能。
D3DCAPS9 d3dCaps;
if( FAILED( g_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, &d3dCaps ) ) )
{
// TO DO: Respond to failure of GetDeviceCaps
return;
}
DWORD dwBehaviorFlags = 0;
if( d3dCaps.VertexProcessingCaps != 0 )
dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
dwBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
初始化D3DPRESENT_PARAMETERS结构体
该结构体用于设置D3D设备的的相关参数,结构体里有十几个成员,就不详细介绍。
创建IDirect3DDevice9对象
HRESULT IDirect3D9::CreateDevice(
[in] UINT Adapter,//主显示设备
[in] D3DDEVTYPE DeviceType,//设备类型
[in] HWND hFocusWindow,//窗口句柄
[in] DWORD BehaviorFlags,//顶点处理方式(软件,硬件)
[in, out] D3DPRESENT_PARAMETERS *pPresentationParameters,
[out, retval] IDirect3DDevice9 **ppReturnedDeviceInterface//返回所创建的设备
);
g_pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
g_hWnd,
dwBehaviorFlags,
&d3dpp,
&g_pd3dDevice
)
在D3D设备上渲染三维图形
首先为渲染一个新的场景做准备,即删除帧缓冲区内的所有土星,并设置屏幕的背景颜色。 这个过程使用clear函数完成。
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_COLORVALUE(0.0f,1.0f,0.0f,1.0f), 1.0f, 0 );
清空缓冲区后,调用BeginScence()函数,通知设备下一步要渲染场景,将想要在屏幕上显示的图形(如顶点流)加载到缓冲区内。具体的渲染场景的方法以后介绍。
渲染结束后,使用EndSence函数。
最后调用Present函数,通知设备将图形绘制到屏幕上。
g_pd3dDevice->BeginScene();
// Render geometry here...
g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}