在进入D3D之前,先来介绍一些基本的图型学概念和Direct3D类型!
首先就是:表面
表面,是Driect3D主要用于存储2D图像数据的一个象素距阵。
在代码中,我们用IDirect3Dsurface9来描述表面;
该接口提供了几种直接从表面读取和写入数据的方法:
Ø LockRect :获取指向表面存储区的指针;
Ø UnlockRect :解除对表面存储区的锁定,是上面配对使用;
Ø GetDest :获得表面描述信息;
下面一个示例实现了锁定表面存储区以及将每个像素设为红色的代码段:
//获得表面描述信息
D3DSURFACE_DESC surfaceDesc;
_surface->GetDesc(&surfaceDesc);
//获得指向表面的指针
D3DLOCKED_RECT lockedRect;
_surface->LockRect(&lockedRect,//
0, //
0 //
);
//把每个像素都设置成红色
DWORD * imageDate = (DWORD*)lockedRect.pBits;
for (int i = 0; i <surfaceDesc.Height; i++)
{
for (int j = 0 ; j <surfaceDesc.Width; j++)
{
int index = i * lockedRect.Pitch/4 +j;
imageDate[index] = 0xffff0000;//red
}
}
//解除锁定
_surface->UnlockRect();
注:
结构D3DLOCKED_RECT定义如下
typedef struct _D3DLOCED_RECT
{
INT pitch; //表面跨度
void *pBits;//指向锁定表面内存开始地方的指针
}D3DLOCKED_RECT