DirectX的一点小知识

来源:互联网 发布:猎杀潜航4修改数据 编辑:程序博客网 时间:2024/05/16 09:41

今天写一些DirectX的常用结构,和大家分享也便于以后回顾。

1.表面:IDirect3DSurface9

  表面就是一个像素点阵,用于存储2D图像数据。就是一个像素的线性数组。

  LockRect()方法使我们可以获得指向表面内存的指针,通过指针运算,我们可以对表面上任一像素进行读写操作。

  UnlockRect()方法即给表面解锁。

  GetDesc()方法使我们可以得到一个D3DSURFACE_DESC结构,用以返回表面的描述信息。

2.Multisampling

  当使用像素矩阵表示图形时,显示时可能会出现锯齿状,Multisampling就是使其平滑的技术,好像应该叫全屏抗锯齿技术。

  D3DMULTISAMPLE_TYPE用来指定全屏抗锯齿的等级。

  D3DMULTISAMPLE_NONE-------------------------------------------------------不使用全屏抗锯齿

  D3DMULTISAMPLE_1_SAMPLED3DMULTISAPLE_16_SAMPLE--------设定1~16的等级

  全屏抗锯齿技术会大大降低程序的运行速度,而且在使用之前需要判断显卡是否支持(IDirect3D9::CheckDeviceMultisampleType)。

3.像素格式

  当我们要创建表面或纹理时,经常需要指定Direct3D资源的像素格式。它是由D3DFORMAT枚举类型定义的,下面是常用的类型:

  D3DFMT_R8G8B8:        表示一个24位像素,从左到右,8位表示红色,8位表示绿色,8位表示蓝色。

  D3DFMT_X8R8G8B8:    表示一个32位像素,从左到右,8位保留不用,8位表示红色,8位表示绿色,8位表示蓝色。

  D3DFMT_A8R8G8B8:    表示一个32位像素,从左到右,8位为ALPHA通道,8位表示红色,8位表示绿色,8位表示蓝色。

  这是目前常用的像素格式,但在使用前仍需要检测显卡是否支持。

4.内存池

  表面,纹理和其他一些Direct3D资源被放在多种内存池中,内存池的种类由D3DPOOL类型来指定。

  D3DPOOL_DEFAULT:表示根据资源的类型和用途把它们放在最合适的地方。注意:这种资源必须要在IDirect3DDevice9::Reset被调用之前销毁,再次使用时需要重新初始化。

  D3DPOOL_MANAGED:资源将由Direct3D管理并按照设备的需要来指定放在显存或是内存。

  D3DPOOL_SYSTEMMEM:指定资源放在系统内存中。

  D3DPOOL_SCRATCH:指定资源放在系统内存中,它与D3DPOOL_SYSTEMMEM的不同在于使用这些资源不必受图形设备的限制。

5.深度缓冲

  深度缓冲也是一个表面,但它不是用来存储图像数据的,而是用来记录像素的深度信息。深度缓冲为每个像素计算深度值,并进行深度测试,比较哪个像素离照相机更近。这样就可以只绘制最靠近照相机的像素,被遮住的像素就不会被画出来。

 

原创粉丝点击