《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对象.
相关文章
|
存储 程序员 C++
《高质量C/C++编程》读书笔记三
《高质量C/C++编程》读书笔记三
91 0
|
前端开发 Java 程序员
《高质量C/C++编程》读书笔记一
《高质量C/C++编程》读书笔记一
97 0
|
存储 人工智能 算法
C++ Primer Plus 第6版 读书笔记(7)第 7 章 函数——C++的编程模块
乐趣在于发现。仔细研究,读者将在函数中找到乐趣。C++自带了一个包含函数的大型库(标准 ANSI 库加上多个 C++类),但真正的编程乐趣在于编写自己的函数;另一方面,要提高编程效率,本章和第 8 章介绍如何定义函数、给函数传递信息以及从函数那里获得信息。
171 0
|
存储 编解码 JSON
Python编程从入门到实践-读书笔记(下)
基础知识重点摘录 字符串 在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号:
|
存储 JSON 测试技术
Python编程从入门到实践-读书笔记(上)
基础知识重点摘录 字符串 在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号: