DirectX历史

DirectX 7

1.

DirectX 8

 

DirectX 9

 

DirectX 9 Ex

 

DirectX 10

DirectX 7.0
新增的内容:

一、 Direct3D 立即模式 API 增加了新特性,包括 : 设备状态块, 几何混合,立方体环境映射 , 用户自定义裁剪面。

二、

API 组成

第一、   Direct3D 快速模式

Direct3DX 实用库

D3D 立即模式的体系结构

           


在了解时,主要了解 Direct3D Immediate Mode C/C++ Reference

         以接口为中心 : 

         接口 : IDirect3D7

           IDirect3DDevice7

           IDirect3DVertexBuffer7

D3DX 实用库是十分重要的库,使用此库可以便利开发。

D3DX 使用库的功能

利用 D3DX 封装 D3D 渲染器,利用 OpenGL API 封装渲染器,渲染器的设计使用统一的接口产生不同的实现版本,

而且可拆卸,即可利用另一个架构的渲染器完全替换掉此渲染器。渲染器 API 可以自由从 D3D 和 OpnGL 之间切换。

Direct3D Utility Library

下图是 Direct3D Utility Library 位于 Direct3D API 库的位置。

 

 

ID3DXContext ——根接口,用于状态配置,纹理创建,显示更新

ID3DXMatrixStack ——实现场景层次的辅助接口

ID3DXSimpleShape ——用于绘制图元的 vertex-buffer 接口

Encapsulates ——封装

Direct3DX Utility Library 本质

   主要用于创建对象,封装对象,操作对象。

主要包括下面几大类的 D3DX API

第一、   Direct3DX 和 Direct3D

第二、   Direct3DX Context

第三、   Direct3DX Devices

第四、   Direct3DX Matrix Stack

第五、   Hardware Acceleration Levels(HAL)

第六、   Sprite Support

第七、   Texturing Support

第八、   Simple Geometric Shapes

第九、   3-D Math Support

D3DX API 分类
 用途
 备注
 代表函数
  
 
Direct3DX 和 Direct3D
 第一、初始化 context object, 更方便的初始化 Direct3D 和 DirectDraw

第二、访问 Direct3D 和 DirectDraw 对象
 获取 IDirect3DDevice7 接口

获取 IDirect3D7 接口

获取 IDirectDraw7 接口
 D3DXCreateContextEx()

g_pd3dx->GetD3DDevice()

 
  
 
Direct3DX Context
 封装了所有各种 Direct3D 和 DirectDraw 对象
  
  
  
 
Direct3DX Devices
 扩展了 Direct3D device

可直接获取设备数量

查询 Direct3DX 设备
  
 D3DXGetCurrentVideoMode

D3DXGetMaxNumVideoModes

D3DXGetVideoMode
  
 
Direct3DX Matrix Stack
 记录矩阵状态
  
  
  
 
Hardware Acceleration Levels(HAL)
 硬件加速
  
 ID3DXContext::GetDeviceIndex

D3DXGetDeviceDescription
  
 
Sprite Support
 辅助 Sprite 的 API, 用于 3D 图形实现 2D sprite
  
 D3DXPrepareDeviceForSprite

D3DXDrawSpriteSimple
  
 
Texturing Support
 纹理辅助函数

转换纹理格式

创建 cube-map 纹理

创建和加载纹理文件

创建纹理

生成 mipmap 纹理

过滤

从表面加载纹理
  
 D3DXCreateTexture

D3DXCreateTextureFromFile

D3DXLoadTextureFromSurface

 
  
 
Simple Geometric Shapes
 用于创建简单的几何形状

立方体

圆柱体 / 圆锥体

圆环

N 边多边形

球体

茶壶
  
 ID3DXSimpleShape
  
 
3-D Math Support
 提供了详细的数学函数支持
  
  
  
 

 

 

Direct3DX Utility Library Reference

 
  
  
 具例
 
接口
 ID3DXContext

ID3DXMatrixStack

ID3DXSimpleShape
  
  
 
函数
 一般目的函数
 用于执行许多一般的任务,如查询设备,视频模式,表面格式,设置和关闭 Direct3DX, 创建 contexts 和产生表面,像素格式
 D3DXCreateContext

D3DXGetDeviceCount

D3DXInitialize

 
 
 
 数学函数
 2D 3D 数学计算
 D3DXColorAdd

D3DXColorModulate

D3DXCreateMatrixStack

D3DXQuaternionIdentity

D3DXVec2Add

D3DXVec2Normalize

D3DXVec3Cross

D3DXMatrixInverse

D3DXVec4Add
 
 
 形状绘制函数
  
 D3DXCreateBox

D3DXCreateCylinder

D3DXCreatePolygon
 
 
 精灵辅助函数
  
 D3DXBuildSpriteTransform

D3DXDrawSprite3D
 
 
 纹理函数
  
 D3DXCreateCubeMapTexutre
 

  
  
 D3DXToDegree

D3DXToRadian
 
结构体
  
  
 D3DXCOLOR

D3DXMATRIX

D3DXPLANE

D3DXVECTOR2

D3DXVECTOR3

D3DXVECTOR4
 
C++ 特定扩展
  
  
 D3DXCOLOR EX

D3DXMATRIX EX

D3DXPLANE EX

D3DXVECTOR2 EX

D3DXVECTOR3 EX

D3DXVECTOR4 EX
 
错误返回值
  
 用于判断 D3D 的错误
  
 

 

 

可以在 D3DX 库的基础上再封装

 


 

D3DX 提供给开发者的东西太好了。

                    

第二、   Direct3D 保留模式

数学函数是可以移植的

world-class 世界级

DirectX 7 的流水线

 

 

DirectX 8
新增

第一、 Pixel shader 1.2 1.3 1.4

第二、 D3DX 实用库函数用于 meshes, textures, 凹凸映射,纹理和四元组

       D3DXComputeTangent

       D3DXComputeNormalMap

       Effect 框架 ID3DXEffect

       纹理库

         D3DXGetImageInformation 获取图像信息

         D3DXSaveSurfaceToFile 保存位图 24bit RGB .dds

         纹理填充函数

                D3DXFillTexture D3DXFillCubeTexture D3DXFillVolumeTexture

     Mesh 库

       D3DXQuaternionSquadSetup

       D3DXQuaternionSquad

      各线异性的支持

      点精灵的支持

      3D 体文理支持

      LOD 几何的支持

      索引顶点混合

     

第三、合并 DirectDraw 和 Direct3D

 

流水线变为

 

 

DirectX 8 主要是增加了可编程管线

 

DirectX9.0 Summer 2003

DirectX9.0 2004

DirectX9.0 2005

DirectX9.0 2006

DirectX9.0 2007

DirectX9.0 2008

DirectX9.0 2009

 

DirectX 8 的 Direct3D 的接口

IDirect3D8

IDirect3DBaseTexture8

IDirect3DCubeTexture

IDirect3DDevice8

IDirect3DIndexBuffer8

IDirect3DResource8

IDirect3DSurface8

IDirect3DSwapChain8

IDirect3DTexture8

IDirect3DVertexBuffer8

IDirect3DVolumn8

IDirect3DVolumnTexture8

这些接口都是低级 3D API 接口,可在此基础上进行二次封装,或直接使用 D3DX 实用库,并再次封装 D3DX 实用库。

 

Direct3DX C/C++ Reference 这是非常不错的图形函数库要比低级 API 高层一些,但它的基础就是 low-level API

 
  
 用途
 具例
  
  
 
接口
  
  
 ID3DXBaseMesh

ID3DXEffect

ID3DXMesh

ID3DXPMesh

ID3DXSkinMesh
  
  
 
函数
 效果函数
 编译、加载可编程着色器文件等
 D3DXCreateEffect

D3DXCreateEffectFromFile

D3DXCreateEffectFromResource
  
  
 
 
 数学函数
  
 D3DXColorAdd

D3DXPlaneDotCoord

D3DXPlaneNormalize
  
  
 
 
 网格函数
  
 D3DXBoxBoundProbe

D3DXComputeBoundingBox

D3DXComputeBoundingSphere

D3DXComputeNormals

D3DXComputeTangent

D3DXIntersect
  
  
 
 
 Misc 函数
  
 D3DXCreateFont

 
  
  
 
 
 着色函数
  
 D3DXAssembleShader
  
  
 
 
 形状绘制函数
  
 D3DXCreateBox

D3DXCreateCylinder

D3DXCreateText

D3DXCreateTeapot
  
  
 
 
 纹理函数
  
 D3DXComputeNormalMap

D3DXCreateCubeTexture

D3DXCreateTexture

D3DXCreateVolumeTexture

D3DXLoadSurfaceFromFile

D3DXSaveSurfaceToFile
  
  
 

 

数学函数可能是可复用度最高的,而其他函数也非常高。比如纹理函数,基于这些纹理函数,可以创建很多实用的工具。

Direct3D 8 的 Mesh 函数非常丰富,这十分强大。

 

虽然 Direct3D 8 提供了大量的 D3DX 友好函数,但是离具体的游戏逻辑还是十分遥远。

所以选择合适的引擎更接近于游戏逻辑,但结合引擎和 D3D 8 9 的 API ,并利用条件编译

这可以让你的工作更便捷。 Direct3D 8 使用的主要是汇编级的着色器。

Direct3D 9 则使用了 HLSL 。

如果你能利用 BSP Octree Quadtree Portal K-D tree 来构造场景管理器,并利用一些辅助引擎,以及 D3DX 来制造渲染器,

那么这种试验是很适合正在学习中的 Fans 的。 DirectX 8 的纹理函数十分膨胀,这为你创建更强大工具提供了很好的支撑。

X File C/C++ 参考

IDirectXFile

IDirectXFileBinary

IDirectXFileSaveObject

DirectXFileCreate

 

DirectX 9.0
DirectX 9.0a

DirectX 9.0b

DirectX 9.0c

增加的功能

第一、   HLSL 流程控制

第二、   预计算 Radiance Transfer(PRT)

第三、   Tone Mapping 用于 HDR Lighting

第四、   动画方面的更新

ID3DXAnimationCallbackHandler

ID3DXAnimationController

DirectX 9.0 的历史将更长

DirectX 9.0 的流水线

 

 

这个流水线和 8.0 的变化不大

Direct3D 9 的 D3DX 库

 
  
 用途
 举例
  
 
接口
  
  
 ID3DXAllocateHierarchy

ID3DXAnimationCallbackHandler

ID3DXAnimationController

ID3DXBuffer

ID3DXEffect
  
 
函数
 动画函数
  
 D3DXCreateAnimationController

D3DXCreateKeyframedAnimationSet

D3DXFrameFind

D3DXLoadMeshHierarchyFromX
  
 
 
 数学函数
  
 D3DXColorAdd

D3DXColorLerp

D3DXMatrixReflect

D3DXVec3Lerp

D3DXVec3Scale

D3DXVec4Lerp
  
 
 
 网格函数
  
 D3DXComputeBoundingBox

D3DXComputeBoundingSphere

D3DXIntersectSubset
  
 
 
 一般函数
  
 D3DXCreateBuffer

D3DXCreateSprite
  
 
 
 着色器函数
  
 D3DXAssembleShader

D3DXCompileShader

D3DXCompileShaderFromFile

D3DXGetShaderVersion
  
 
 
 形状绘制函数
  
 D3DXCreateBox

D3DXCreateTeapot
  
 
 
 纹理函数
  
 D3DXComputeNormalMap

D3DXCreateCubeTexture

D3DXCreateTexture

D3DXCreateVolumeTexture

D3DXFillCubeTexture

D3DXSaveSurfaceToFile
  
 
 
 PRT 函数
  
 D3DXSHPRTCompExtractBasis

D3DXSHPRTCompExtractClusterIDs

D3DXSHPRTCompExtractTexture
  
 

 

DirectX 8 9 SDK 的 D3DX 的函数都十分不错。

但总体来说这些函数的使用要看针对的是什么计算任务,要合理的使用,而不要一味的滥用。

DirectX 9.0 提供的特性只是游戏需要的一部分,它的最直接的用途,就是对图元绘制,渲染,着色,特效的支撑,除此之外的

绝大部分功能都需要其他部分来支撑,比如物理, AI ,系统等方面,所以合理的使用一个不错的成熟的引擎,是更好的选择。

 

关于 D3DX 内的纹理、数学等函数使用起来还是很不错的。由于数学的抽象性,所以数学函数的持久性更长,

它就像 C++ Perl Python 这类语言一样,像 Unix 的管道、重定向等机制一样可以源远流长。

所以合理的利用现有的函数,可以提高你的效率。

 

对于类库建立着,学习 DirectX 的方式,建立自己稳固的,可复用高的 API 层,并在此基础上构件类库更符合持久性。

 

DirectX 9 Ex
  Direct3D 9Ex 是 Windows Vista 下的 Direct3D 9 增强版本

图形管线

 

 

我们发现图形管线增加了 Geometry Processing

D3DX 库

D3DX Reference

分类
 子类
 用途
 举例
 
接口
  
  
 ID3DXAnimationController

ID3DXBuffer

ID3DXEffect

ID3DXPRTBuffer
 
函数
 动画函数
  
 D3DXCreateAnimationController

D3DXFRAMEFind
 
 
 一般函数
  
 D3DXCreateFont

D3DXCreateBuffer

D3DXCreateRenderToSurface
 
 
 数学函数
  
 D3DXColorAdd

D3DXColorLerp

D3DSHAdd

D3DSHDot
 
 
 网格函数
  
 D3DXComputeBoundingBox
 
 
 预 RadianceTransfer(PRT) 函数
  
 D3DXCreatePRTBuffer
 
 
 着色函数
  
 D3DXCompileShader

D3DXPreprocessShader
 
 
 形状绘制函数
  
 D3DXCreateBox

D3DXCreateCylinder
 
 
 纹理函数
  
 D3DXCreateTexture

D3DXFillCubeTexture
 
 
 UVAtlas 函数
  
 D3DXUVAtlasCreate

D3DXComputeIMTFromPerVertexSignal
 

 

 

 

 

DirectX 10
DirectX 10 内设置了 XACT XAudio2 XInput ,用来取代 DirectAudio 和 DirectInput

 

 

图形管线

 

 

D3DX 库

分类
 举例
 举例
 
接口
 ID3DX10DataLoader

ID3DX10Font

ID3DX10Mesh
  
 
函数
 一般函数
 D3DX10CreateFont

D3DX10CompileFromFile
 
 
 数学函数
 D3DXColorAdjustContrast

D3DXMatrixInverse

D3DXMatrixReflect
 
 
 网格函数
 D3DX10CreateMesh

D3DXBoxBoundProbe
 
 
 纹理函数
 D3DX10ComputeNormalMap

D3DX10FilterTexture
 

 

 

 

综述 : DirectX 是一套低级 API, 虽然有大量的纹理和数学,网格的实用函数,但是如果您的目的是快速的开发,那么直接使用 DirectX 来进行开发并不是明智之举。

哪怕是直接使用一个特性不那么多的二次封装引擎,您的效率也是显而易见的。除非您正在利用 DirectX 封装图形渲染器,或制造一个商业游戏引擎,那就另当别论了。

如果您只是期望制造一个游戏,商用目的或想尽快制造一个游戏,期望直接进入游戏编程和游戏设计主题,那么开源界有很多好用的游戏引擎在等着您。比如 Ogre Nebula 等等,

那是一片海洋,选择什么样的利刃全在于你。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaoxiaoning/archive/2009/07/03/4317528.aspx

你可能感兴趣的:(DI)