Direct3D基础——预备知识:表面

本文介绍了Direct3D中的基本概念——表面,它是一个2D图像数据的像素矩阵,存储在线性数组中。表面的宽度、高度以像素表示,跨度以字节度量,可能大于宽度。IDirect3DSurface9接口用于描述表面,包含LockRect、UnlockRect和GetDesc等关键方法。LockRect提供读写像素的访问,UnlockRect解锁表面,GetDesc获取表面信息。示例代码展示了如何锁定表面并设置所有像素为红色,强调了32位像素格式的重要性。

表面我们可以将其看作是Direct3D主要用于储存2D图像数据的一个像素矩阵。虽然我们将表面看作矩阵,但是其实际的存储是在一个线性数组里面。

表面的宽度(Width)和高度(Height)都是用像素来表示,跨度(Pitch)则用字节来度量,更具体的说:跨度(Pitch)可能比宽度(Width)更宽,这要依赖于底层的硬件实现,所以不能简单的假设pitch = Width×Height。

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

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

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

GetDesc:该方法可以使用填充结构D3DSURFACE_DESC来获取表面的相关信息。

如果考虑表面跨度,锁定表面储存区然后对每一个像素进行操作,看起来有些复杂,但是这里有一个简单的程序,作用就是锁定表面的储存区以及将每一个像素设为红色,通过这段代码帮助理解:

//假设surface是指向IDirect3DSurface接口的点
//假设每一个像素都采用32位的像素模式
//得到一些表面的描述
D3DSURFACE_DES surfaceDesc;
_surface->GetDesc(&surfaceDesc);

//获取一个指向表面像素的指针
D3DLOCKED_RECT lockedRect;
_surface->LockRect(
	&a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值