Direct3D的初始化

名词

描述

HAL(Hardware Abstraction Layer,硬件抽象层)

HAL是一个指示设备完成某些操作的设备相关的代码集。

REF(reference rasterizer device,参考光栅设备)

REF设备;

跨度(pitch)

表面(surface)的宽度和高度都用像素来度量,跨度则用字节来度量。IDirect3DSurface9来描述表面。

D3DFORMAT枚举类型

像素格式

D3DPOOL枚举类型

内存池

深度缓存(depth buffer)或z-缓存

是一个只含有特定像素的深度信息而不含图像数据的表面。为最终绘制的图像中的每一个像素都保留了一个深度项(entry)。

 

 

1.   获取接口IDirect3D9的指针

   IDirect3D9  *  _d3d9;

   _d3d9 = Direct3DCreate9(D3D_SDK_VERSION);

 

2.  校验硬件顶点运算

   HRESULT  IDirect3D9::GetDeviceCaps(

      UINT         Adapter,

      D3DDEVTYPE   DeviceType,

      D3DCAPS9 *   pCaps

   );

  • Adapter    指定物理显卡的序号。
  • DeviceType   指定设备类型(例如硬件设备(D3DDEVTYPE_HAL)或软件设备(D3DDEV_TYPE_REF))。
  • pCaps      返回已初始化的设备性能结构实例。

3.  填充D3DPRESENT_PARAMETER结构:

  struct D3DPRESENT_PARAMETERS{

   UINT BackBufferWidth;

   UINT BackBufferHeight;

   D3DFORMAT BackBufferFormat;

   UINT BackBufferCount;

   D3DMULTISAMPLE_TYPE MultiSampleType;

   DWORD MultiSampleQuality;

   D3DSWAPEFFECT SwapEffect;

   HWND hDeviceWindow;

   BOOL Windowed;

   BOOL EnableAutoDepthStencil;

   D3DFORMAT AutoDepthStencilFormat;

   DWORD Flags;

   UINT FullScreen_RefreshRateInHz;

   UINT PresentationInterval;

  };

   
    (1)BackBufferWidth和BackBufferHeight:后备缓冲的宽度和高度。

     (2)BackBufferFormat:后备缓冲的格式。这个参数是一个D3DFORMAT 枚举类型,它的值有很多种,例如D3DFMT_R5G6B5,这说明后备缓冲的格式是每个像素16位,其实红色(R)占5位,绿色(G)占6位,蓝色(B)占5位,为什么绿色会多一位呢?据说是因为人的眼睛对绿色比较敏感。DX9只支持16位和32位的后备缓冲格式,24位并不支持。如果对这D3DFORMAT不熟悉的话,可以把它设为D3DFMT_UNKNOWN,这时候它将使用桌面的格式。

     (3)BackBufferCount:后备缓冲的数目,范围是从0到3,如果为0,那就当成1来处理。大多数情况我们只使用一个后备缓冲。使用多个后备缓冲可以使画面很流畅,但是却会造成输入设备响应过慢,还会消耗很多内存。

     (4)MultiSampleType和MultiSampleQuality:这两个参数可以使你的渲染场景变得更好看,但是却消耗你很多内存资源,而且,并不是所有的显卡都支持这两者的所设定的功能的。在这里我们分别把它们设为D3DMULTISAMPLE_NONE和0。

     (5) SwapEffect:交换缓冲支持的效果类型。它是D3DSWAPEFFECT枚举类型,可以设定为以下三者之一:D3DSWAPEFFECT_DISCARD,D3DSWAPEFFECT_FLIP,D3DSWAPEFFECT_COPY。如果设定为D3DSWAPEFFECT_DISCARD,则后备缓冲区的东西被复制到屏幕上后,后备缓冲区的东西就没有什么用了,可以丢弃(discard)了。如果设定为D3DSWAPEFFECT_FLIP,则表示在显示和后备缓冲之间进行周期循环。设定D3DSWAPEFFECT_COPY的话,我也不太清楚有什么作用*^_^*。一般我们是把这个参数设为D3DSWAPEFFECT_DISCARD。

     (6)hDeviceWindow:显示设备输出窗口的句柄

     (7) Windowed:如果为FALSE,表示要渲染全屏。如果为TRUE,表示要渲染窗口。渲染全屏的时候,BackBufferWidth和BackBufferHeight的值就得符合显示模式中所设定的值。

     (8) EnableAutoDepthStencil:如果要使用Z缓冲,则把它设为TRUE。

     (9)AutoDepthStencilFormat:如果不使用深度缓冲,那么这个参数将没有用。如果启动了深度缓冲,那么这个参数将为深度缓冲设定缓冲格式(和设定后备缓冲的格式差不多)

    (10)Flags:可以设置为0或D3DPRESENTFLAG_LOCKABLE_BACKBUFFER。不太清楚是用来做什么的,看字面好像是一个能否锁定后备缓冲区的标记。
  (11)FullScreen_RefreshRateInHz:显示器的刷新率,单位是HZ,如果设定了一个显示器不支持的刷新率,将会不能创建设备或发出警告信息。为了方便,一般设为D3DPRESENT_RATE_DEFAULT就行了。
  (12)PresentationInterval:如果设置为D3DPRENSENT_INTERVAL_DEFAULT,则说明在显示一个渲染画面的时候必要等候显示器刷新完一次屏幕。例如你的显示器刷新率设为80HZ的话,则一秒内你最多可以显示80个渲染画面。另外你也可以设置在显示器刷新一次屏幕的时间内显示1到4个画面。如果设置为D3DPRENSENT_INTERVAL_IMMEDIATE,则表示可以以即时的方式来显示渲染画面,虽然这样可以提高帧速(FPS),但是却会产生图像撕裂的情况。

 

4.  创建IDirect3DDevice9接口

   HRESULT  IDirect3D9::CreateDevice(

      UINT    Adapter,

      D3DDEVTYPE   DeviceType,

      HWND         hFocusWindow,

      DWORD        BehaviorFlags,

      D3DPRESENT_PARAMETERS  *pPresentationParamerters,

      IDirect3DDevice9 **  ppReturnedDeviceInterface

  );

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值