表面
表面是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游戏开发编程基础》笔记