D3D全称Direct 3D,是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手树立的3D API规范,微软公司拥有该库版权,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。
Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。
一个D3D设备接口可以简单的认为是本机一块显卡的抽象,它包含了显卡所有的硬件参数及状态值,比如 说,显卡显存的数量和起始的线性地址,是否支持深度缓冲(Depth Buffer),雾化(Fog),纹理(Texture) 及MipMap等。在DirectX8.0中,你可以用如下代码建立一个D3D对象: #include // 必须包含的头文件 #include LPDIRECT3D8 g_lpD3D = NULL; // D3D对象指针,以后经常用到 if( NULL == (g_lpD3D=Direct3Dcreate8(D3D_SDK_VERSION) ) ) // D3D_SDK_VERSION确保该对象建立正确的头文件上,目前只能用该值。 return E_FAIL;建立D3D设备 在DirectX 8.0中,建立一个D3D设备需要到用IDirect3D8 接口中的CreateDevice函数,该函数原型如下 HRESULT CreateDevice( UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DDevice8** ppReturnedDeviceInterface ); 函数参数说明可以查询DirectX 8.0 SDK 的文档,不过是英文的,下面给出一段代码说明: // 该段代码建立一个基于Window窗口程序的D3D硬件抽象层设备,采用软件的顶点数据处理,并使用16Bits 的深度缓冲区。 D3DDISPLAYMODE d3ddm; HRESULT hr = 0; hr = g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ); if( FAILED(hr) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; // 指明是窗口模式,而非全局独占模式 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 无需交换链 d3dpp.BackBufferFormat = d3ddm.Format; // 后备缓冲区颜色格式 d3dpp.EnableAutoDepthStencil = TRUE; // 使深度缓冲区有效 d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 深度缓冲区颜色格式 // Create the D3D Device hr = g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, // 使用当前显卡作注设备 D3DDEVTYPE_HEL, // 设备类型 hWnd, // 该程序所在的窗口句柄 D3DCREATE_SOFTWARE_VERTEXPROCESSING, // 用软件的方法处理顶点数据 &d3dpp, // 指向上面的结构 &g_pd3dDevice ) ) ) // 指向3D设备的指针 if( FAILED(hr) ) { return E_FAIL; }
Direct3D (D3D):是微软为提高3D 游戏在Windows中的显示性能而开发的显示程序,目前已经升级到10.0版本,它提供了丰富的3D功能库,是游戏广泛采用的标准.