始化DirectX步骤
Opengl和DirectX的区别
底层区别: Direcx 使用的是行向量,openg! 是列向量
应用领域区别:计算机图形学爱用OpenGL,游戏开发爱用DirectX
在游戏开发领域: DirectX 是必选项,OpenGL 是可选项。
初始化DirectX
(1)(以防万一-)安装DirectX
(2)获取编译好的DirectX文件和初始化代码文件
在微信公众号.上点击学习资料获取网盘地址
(3)新建win32空项目
(4)添加DirectX路径
添加VC++ 路径
(5)在链接器重设置输入
(6)添加代码
把文件中代码添加到项目中
(7)运行
如果出现黑窗口则表示成功
VS2008 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”
初始化DirectX四部曲
创建窗口和消息循环代码复习
HAL和REF
HAL—硬件抽象层直接与硬件对话
这一层通常是来自硬件供货商的
设备驱动程序,您通过常规DirectX调用直接与它通信。当硬件设备
支持您请求的功能时,将使用HAL,从而得到硬件加速。
REF—参考光栅设备(reference rasterizer device)
有时,DirectX3D 提供的某些功能不为您的图形设备支持,但是
您仍然希望使用该功能。为了满足这种需求,Direct3D 提供了
参考光栅设备(reference rasterizer device),即REF设备,它能以软.
件运算方式完全支持Direct3DAPI.
但是注意,REF无法发布给最终用户。此外,REF速度非常缓慢,在
COM(组件对象模型)
COM ( Component Object Model,组件对象模型)是一项能够使用DirectX独立与编程语言并具备向下兼容的技术。我们厂称COM对象为接口,可将其视为一个C++类来使用。我们所必须知道的仅仅是如何通过某个特定函数或另一个COM接口的方法来获取指向某一个接
口的指针;创建COM接口时不可使用C++的关键字new,此外,使用完一个接口,应调用该接口响应的Release方法(所有的COM接口的功能都继承自COM接口lUnknow, 该接口提供了Release 方法)而不是C++的delete.
初始化Direct3D四部曲
(1)获取接口IDirect3D9 的指针。该接口用于获取系统中物理硬件
设备的信息并创建接口lDirect3DDevice9,该接口是一个C++对象,代
表了我们用来显示3D图形的物理硬件设备。
(2)检查设备性能(D3DCAPS9) ,判断主显卡是否支持硬件顶点运.
算。为了创建接口lDirect3DDevice9,我们必须明确显示是否支持该
::MessageBox前面::的作用
可以确保调用的是 Windows API 中的 MessageBox 函数,而不是某个其他命名空间中的同名函数。
这段代码是 Direct3D 应用程序的初始化部分,负责创建 Direct3D 设备并配置其属性。
步骤 1:创建 IDirect3D9 对象
使用 Direct3DCreate9
函数创建 IDirect3D9
对象,该对象用于管理 Direct3D 设备和资源。
步骤 2:检查硬件顶点运算支持
使用 GetDeviceCaps
方法检查硬件设备的性能和功能。根据硬件支持的顶点处理能力,选择相应的顶点处理模式(硬件或软件)。
步骤 3:填充 D3DPRESENT_PARAMETERS 结构
填充 D3DPRESENT_PARAMETERS
结构体,该结构描述了要创建的设备的呈现参数,如后台缓冲区的大小、格式、刷新率等。
步骤 4:创建设备
使用 CreateDevice
方法创建 Direct3D 设备,指定所需的适配器、设备类型、窗口句柄等参数,并传递填充好的呈现参数结构体。CreateDevice
方法会尝试创建与所选设备和参数匹配的 Direct3D 设备。
在这个过程中,::MessageBox
用于显示失败的消息框,::
用于指定全局作用域,确保调用的是 Windows API 中的 MessageBox
函数。
详细参数介绍
// Step 1: Create the IDirect3D9 object.
//步骤1:获取我们硬件设备信息
//函数Direct3DCreate9的参数必须是D3D_SDK_VERSION,只有如此方能保证应用程序使用正确的头文件。如果该函数调用失败,将返回一
//个NULL指针
IDirect3D9* d3d9 = 0;
d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
if( !d3d9 )
{
::MessageBox(0, "Direct3DCreate9() - FAILED", 0, 0);
return false;
}
// Step 2: Check for hardware vp.
//步骤2:检查硬件是否支持顶点运算
D3DCAPS9 caps;
//UINT Adapter:指定物理显卡的序号
//D3DDEVTYPE DeviceType:指定设备类型(例如硬件设备D3DDEVTYPE_HAL)或软件设备(D3DDEVTYPE_REF)
//D3DCAPS9 *pCaps:返回已初始化的设备性能结构实例
d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, deviceType, &caps);
int vp = 0;
if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
//硬件顶点运算
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
// Step 3: Fill out the D3DPRESENT_PARAMETERS structure.
//步骤3:填充D3DPRESENT_PARAMETERS 结构体
D3DPRESENT_PARAMETERS d3dpp;
//后台缓存中表面的宽度,单位为像素
d3dpp.BackBufferWidth = width;
//后台缓存中表面的宽度,单位为像素
d3dpp.BackBufferHeight = height;
//后台缓存的像素格式(如:32为像素格式:D3DFMT_A8R8G8B8)
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
//所需使用的后台缓存的个数,通常指定为1,表明我们仅需要一个后台缓存
d3dpp.BackBufferCount = 1;
//后台缓存所使用的多重采样类型
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
//多重采样的质量水平
d3dpp.MultiSampleQuality = 0;
//枚举类型的一个成员。该枚举类型指定了交换链中的缓存的页面置换方式。指定为D3DSWAPEFFECT_ DISCARD时效率最高。
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
//与设备相关的窗口句柄。指定了所要进行绘制的应用程序窗口。
d3dpp.hDeviceWindow = hwnd;
//为true时,表示窗口模式。为false时,表示全屏模式
d3dpp.Windowed = windowed;
//设置为true,则Direct3D自动创建并维护深度缓存或模板缓存。
d3dpp.EnableAutoDepthStencil = true;
//深度缓存或模板缓存的像素格式(例如,用24位表示深度并将8位保留供模板缓存使用,
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
//-些附加的特性。可以指定为0 (无标记)
d3dpp.Flags = 0;
//刷新频率。如果想使用默认的刷新频率,可将该参数指定为D3DPRESENT_ _RATE_ _DEFAULT.
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
//PresentationInterval : D3DPRESENT集 合的一个成员。D3DPRESENT- -一INTERVAL_ IMMEDIATE: 立即提交
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
// Step 4: Create the device.
//步骤4:创建设备
hr = d3d9->CreateDevice(
//UINT Adapter:指定我们希望用已创建的IDirect3DDevice9对象代表哪块物理显卡。 默认是主显卡
D3DADAPTER_DEFAULT, // primary adapter
//指定需要使用的设备类型(如,硬件设备D3DDEVTYPE_ HAL)
deviceType, // device type
//窗口句柄
hwnd, // window associated with device
//顶点运算
vp, // vertex processing
//填充D3DPRESENT_ PARAMETERS 结构体对象
&d3dpp, // present parameters
//返回创建的设备
device); // return created device