DirctX9.03D 预备知识

表面

 

表面是Direct3D主要用于存储2D图像数据的一个像素矩阵。

表面的宽度(width)和高度(height)都用像素来度量。跨度(pitch)则用字节来度量。具体地说, 跨度可能会比宽度更“宽”。

在代码中, IDirect3DSurface9 来描述表面。该接口提供了几种直接从表面读取和写入数据的方法, 以及一种获取表相关信息的方法。 接口IDirect3DSurface9中最重要的方法如下。

LockRect 该方法用于获取指向表面存储区的指针。通过指针运算,可对表耐听的每一个像素进行读写操作。

UnlockRect 如果调用了LockRect方法,而且已执行完访问表面存储区的操作,必须调用该方法以解除对表面存储区的锁定。

GetDesc 该方法可通过填充结构DSURFACE_DESC来获取该 表面的描述信息

结构D3DLOCKED_RECTYP定义如下:

Typedef struct _D3DLOCKED_RECT {

INT pitch;     //the surface pitch

void *pBits;   //pointer to the start of the surface memory

}D3DLOCKED_RECT;

多重采样

用像素矩阵表示图像时往往会出现块状效应,多重采样便 是一项用于平滑块状图像的技术。 对表面进行多重条样常用天全屏反走样。

会显著降低应用程序的运行速度。

要使用IDirect3D9::CheckDeviceMultiSampleType方法来枪柄你的图形设备是否支持你所希望采用的多重样类型。

内存池

表面和其他的Direct3D厅以放入许多 类型的内存池 如显存 AGP存储 系统存储区。

交换链和页面置换

Direct3D 维护着一个表面集合。该集合通常帅两到三个表面组成,称为交换链。该 集合用接口IDirect3DSwapChain9来表示。

交换链和页面转换技术主要用于生成更加平滑的动画。

完成绘制功能的程序为:

(1)    在后台缓存中进行绘制。

(2)    提交后台缓存的内容

(3)    回到步骤(1)

深度缓存

 

深度缓存是一个只含有特定像素的深度信息而不含图像数据的表面。

Direct3D为了斗室某一物体的哪些位于另一个物体之前,使用了一项称为深度缓存(depth buffering)或z-缓存(z-buffering)的技术

顶点运算

有两种 软件顶点运算(software vertex process) 硬件顶点运算(hardware vertex process) 可以的优先硬件顶点运算

《DirectX 9.0 3D游戏开发编程基础》笔记

原文地址:https://www.cnblogs.com/fangshenghui/p/1705741.html