基本图形学概念

交互关系

Direct3D是一套底层图形API,借助该API我们能够利用硬件加速功能来绘制3D场景,Direct3D可以被视作应用程序与图形设备交互的中介

 HAL:硬件抽象层,指示设备完成某些操作的设备相关的代码集,设备制造商将其产品所支持的全部功能都实现到HAL中,调用一个没有在HAL中实现的Direct3D函数会导致调用失败,除非它是一种顶点处理运算,并且用户已指定了使用软件运算方式来模拟。

REF:有时Direct3D提供的某些功能不能为现有图形设备所支持,但仍希望使用,Direct提供了参考光栅设备,即REF设备,它能以软件方式完全支持Direct3DAPI,REF设备仅用于开发阶段,这一点十分重要,它与DirectX SDK捆绑在一起,无法发布给最终用户,此外REF速度十分缓慢,在测试以外的其他场合不实用

D3DDEVTYPE:代码中HAL设备用值D3DDEVTYPE_HAL来指定,REF设备用值D3DDEVTYPE_REF来指定,在创建设备时,必须指定使用哪种哪种设备类型

COM(组件对象模型):例如IDirect3DDevice9,COM是一项能够使DirectX独立于变成语言并具备向下兼容的技术,常称COM对象为接口可将其视为一个C++类来使用,创建COM接口时不可使用new,使用完一个接口应调用该接口的相应的Release方法(所有COM接口的功能都继承自COM接口IUnknown,该接口提供了Release方法),而不是使用delete,COM对象能够对其所使用的内存实施自治

表面

表面是Direct3D主要用于存储2D图像数据的一个像素矩阵,虽然将表面存储的数据视为一个矩阵,但像素数据实际存储在一个线性数组中

 使用接口IDirect3DSurface9来描述表面,该接口提供了几种直接从表面读取和写入数据的方法

LockRect:用于获取指向表面存储区的指针,通过指针运算,可对表面中每个像素进行读写操作
UnlockRect:如果调用了LockRect方法,并且已执行完访问存储区的操作,需要调用该方法解锁
GetDesc:该方法可以通过填充结构D3DSURFACE_DESC来获取该表面的描述信息

多重采样

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

 D3DMULTISAMPLE_TYPE枚举类型包含了一些列枚举枚举常量值,用于表示对表面进行多重采样的级别,该技术会显著降低程序运行速度,如果希望使用该技术,请使用IDirect3D9::CheckDeviceMultiSampleType来检查图形设备是否支持所希望采用的多重采样类型

像素格式

创建表面或纹理时,常常需要指定这些Direct3D资源的像素格式,像素格式可以用D3DFORMAT枚举类型的常量来定义
D3DFMT_R8G8B8
D3DFMT_A8B8G8R8
.....

内存池

表面和其他Direct3D资源可以放入许多类型的内存池中,内存池的类型可用D3DPOOL枚举类型来表示

交换链和页面置换

Direct3D维护着一个表面集合,改集合通常由俩到三个表面组成,成为交换链,该集合用接口IDirect3DSwapChain9表示,交换链和页面置换技术主要用于生成更加平滑的动画

 位于前台缓存槽中的表面对应于当前在显示器中显示的图像,直到当前帧在显示器中显示完毕后,才将前台缓存中内容更新为下一帧,在显示器显示前台缓存内容期间,我们将下一帧内容绘制到一个离屏表面(后台缓存),这样当显示器将前台缓存中的内容显示完毕后,我们将其置换到交换链末端,并将交换链中下一个后台缓存提升为前台缓存,这个过程称为提交

完成绘制功能程序结构:
1.在后台缓存中进行绘制
2.提交后台缓存内容
3.回到步骤1

深度缓存

深度缓存是一个只含有特定像素的深度信息,而不含图像数据的表面,深度缓存为最终绘制的图像中的每一个像素都保留了一个深度项,Direct3D为了判定某一物体的哪些像素位于另一个物体之前,使用了一项称为深度缓存的技术,深度缓存用于计算每个像素的深度值并进行深度测试,深度测试基本内容是依据深度值让处于同一个位置的不同像素进行竞争,选出应写入该位置的像素,距离摄像机最近的像素获胜,并被写入深度缓存的相应位置上
D3DFMT_D32
D3DFMT_D24S8
.........

顶点运算

在Direct3D中可用俩种不同的方式进行顶点运算,即软件顶点运算硬件顶点运算,无论采用何种配置的硬件,软件顶点运算总是会被支持,所以总是可以使用,硬件顶点运算只有得到图形卡的支持才可使用我们应始终优先考虑硬件顶点运算,因为使用它专有的加速功能,会比软件运算快很多,而且在硬件中进行顶点计算不占用cpu资源,cpu可以被解放出来进行其他运算,图像卡支持硬件顶点运算的另一种等价说法是该图形卡支持变换和光照的硬件计算

设备性能

Direct3D所提供的每一项性能都对应结构D3DCAP9中的一个数据数据成员或某一位,我们先以某一具体硬件为基础,初始化一个D3DCAP9类型的示例,然后在程序中检查该实例中相应的数据成员或位来判断设备是否具有某项特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值