DirectX历史

DirectX 7

1.

DirectX 8

 

DirectX 9

 

DirectX 9 Ex

 

DirectX 10

DirectX 7.0

新增的内容:

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

二、

API 组成

第一、   Direct3D 快速模式

Direct3DX 实用库

D3D 立即模式的体系结构

           DirectX历史_第1张图片

在了解时,主要了解 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 库的位置。

DirectX历史_第2张图片 

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 库的基础上再封装

 DirectX历史_第3张图片

 

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

                    

第二、   Direct3D 保留模式

数学函数是可以移植的

world-class 世界级

DirectX 7 的流水线

DirectX历史_第4张图片 

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历史_第5张图片 

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 的流水线

DirectX历史_第6张图片 

这个流水线和 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

 

 

图形管线

DirectX历史_第7张图片 

D3DX 库

分类

举例

举例

接口

ID3DX10DataLoader

ID3DX10Font

ID3DX10Mesh

 

函数

一般函数

D3DX10CreateFont

D3DX10CompileFromFile

 

数学函数

D3DXColorAdjustContrast

D3DXMatrixInverse

D3DXMatrixReflect

 

网格函数

D3DX10CreateMesh

D3DXBoxBoundProbe

 

纹理函数

D3DX10ComputeNormalMap

D3DX10FilterTexture

 

 

 

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

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

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

你可能感兴趣的:(DirectX历史)