首页 > 代码库 > 《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记

《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记

 

REF设备

参考光栅设备,他能以软件计算方式完全支持Direct3D Api。借助Ref设备,可以在代码中使用那些不为当前硬件所支持的特性,并对这此特性进行测试。

D3DDEVTYPE

在程序代码中,HAL设备用值D3DDEVTYPE_HAL来表示。该值是一个枚举变量。REF设备用D3DDEVTYPE_REF来表示。这种类型非常重要,你需要铭记,因为在创建设备的时候,我们必须指定使用哪种设备类型。

COM(组件对象模型)

创建COM接口时不可以使用c++关键字new。此外使用完接口,应调用Release 方法。

表面

image

表面的宽度和高度用像素来度量。跨度则用字节来度量。

在代码中IDirect3DSurface9来描述表面,它的重要方法如下:

  1. LockRect 获取指向表面存储区的指针
  2. UnloclRect 释放
  3. GetDesc 得到表面描述信息。

如下代码实现了锁定表面存储区以及将每一个像素设为红色的代码。

Code Snippet
  1.       D3DSURFACE_DESCsurfaceDesc;
  2.       _surface->GetDesc(&surfaceDesc);
  3.  
  4.       D3DLOCKED_RECTlockedRect;
  5.       _surface->LockRect(&lockedRect,
  6.           0,
  7.           0);
  8.         DWORD * imageData= (DWORD *) lockedRect.pBits;
  9.       for(inti = 0;i<surfaceDesc.Width;i++)
  10.           for(intj = 0;j<surfaceDesc.Height;j++)
  11.           {
  12.               intindex = i * lockedRect.Pitch / 4 + j;//32DWORD4,4
  13.               imageData[index] = 0xffff0000;//red
  14.           }
  15.       _surface->UnlockRect();

 

多重采样

多重采样一种平滑技术,用于防止快状效应。

内存池

表面和其它的Direct3D资源可以放入许多类型的内存池中,内存池的类型可以D3DPOOL枚举类型来表示 。包括:

  1. D3DPOOL_DEFAULT
  2. D3DPOOL_MANAGE
  3. D3DPOOL_SYSTEMMEM
  4. D3DPOOL_SCRATCH

交换链和页面置换

Direct3D维护着一个表面 的集合。该集合通常由现从到三个表面组成,称为交换链。该集合用IDirect3DSwapChain9来表示 。

完成绘制功能的程序结构为:

  1. 在后台缓存进行绘制
  2. 提交后台缓存
  3. 回到步骤1

深度缓存

只含有像素尝试信息而不含图像数据的表面。

深度缓存用于计算每一个像素深度值来测试内容是否被显示。

Direct3D的初始化

  1. 获取接口IDirct3D9的指针该接口用于获取系统中物理硬件设备的信息创建接口IDirect3DDevice9,该接口是一个c++对象,代表了我们用来显示的3d图形的物理硬件设备。
  2. 检查设备性能(D3DCAPS9)
  3. 初始化D3DPRESENT_PARAMETERS结构的一个实例。该接口用于指定IDirect3Device9的特性。
  4. 创建IDirect3Device9对象.