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