DirectX 7
1.
DirectX 8
DirectX 9
DirectX 9 Ex
DirectX 10
新增的内容:
一、 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 的流水线
新增
第一、 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.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 层,并在此基础上构件类库更符合持久性。
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 内设置了 XACT XAudio2 XInput ,用来取代 DirectAudio 和 DirectInput
图形管线
D3DX 库
分类 |
举例 |
举例 |
接口 |
ID3DX10DataLoader ID3DX10Font ID3DX10Mesh |
|
函数 |
一般函数 |
D3DX10CreateFont D3DX10CompileFromFile |
|
数学函数 |
D3DXColorAdjustContrast D3DXMatrixInverse D3DXMatrixReflect |
|
网格函数 |
D3DX10CreateMesh D3DXBoxBoundProbe |
|
纹理函数 |
D3DX10ComputeNormalMap D3DX10FilterTexture |
综述 : DirectX 是一套低级 API, 虽然有大量的纹理和数学,网格的实用函数,但是如果您的目的是快速的开发,那么直接使用 DirectX 来进行开发并不是明智之举。
哪怕是直接使用一个特性不那么多的二次封装引擎,您的效率也是显而易见的。除非您正在利用 DirectX 封装图形渲染器,或制造一个商业游戏引擎,那就另当别论了。
如果您只是期望制造一个游戏,商用目的或想尽快制造一个游戏,期望直接进入游戏编程和游戏设计主题,那么开源界有很多好用的游戏引擎在等着您。比如 Ogre Nebula 等等,那是一片海洋,选择什么样的利刃全在于你。