目录
1、什么是DirectX?
2、使用DirectX的好处
2.1、DirectX为软件开发者提供硬件无关性
2.2、为硬件开发提供策略
3、DirectX的主体构成
3.1、Direct3D
3.2、DirectDraw
3.3、DirectPlay
3.4、DirectSound
3.5、DirectMusic
3.6、DirectInput
4、DirectX与COM组件
5、最后
VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具从入门到精通案例集锦(专栏文章正在更新中...)https://blog.csdn.net/chenlycly/article/details/131405795C/C++基础与进阶(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_11931267.html开源组件及数据库技术(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_2276111.html
1、什么是DirectX?
DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口,是一种应用程序接口(API)。DirectX可以让以Windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。Windows平台上,几乎所有游戏画面的渲染绘制使用的都是DirectX,DirectX已被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE游戏开发中。
DirectX 本质上是一个软件系统(多媒体控制处理引擎),它抽象了视频、音频、输入、网络、安装和其他的功能,使得无论PC机器的配置如何,代码都可以重用。
DirectX技术比GDI/MCI(Media Control Interface)要快速、健壮,它充分利用硬件的加速功能,又隐藏硬件相关的设备特性,它们旨在使基于 Windows 的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。DirectX包括安全和性能更新程序,以及许多涵盖所有技术的新功能
2、使用DirectX的好处
DirectX可以开发出高性能实时的应用程序,可以直接访问计算机中的硬件和将来系统中新的硬件设备。DirectX在硬件和应用之间提供了一致的接口以减少安装和配置的复杂性,并且使硬件的利用达到最优。利用DirectX提供的接口,程序员能充分利用硬件的特性而不需要考虑其具体细节。
2.1、DirectX为软件开发者提供硬件无关性
微软开发 DirectX,其最主要的目的之一是促进在 Windows 操作系统上的游戏和多媒体应用程序的发展。在 DirectX 出现以前,主要的游戏开发平台是MS-DOS,游戏开发者们为了使他们的程序能够适应各种各样的硬件设备而绞尽脑汁。自从有了DirectX,游戏开发者们便可以获益于 Windows 平台的设备无关性,而又不失去直接访问硬件的特性。DirectX主要的目的就是提供像 MS-DOS一样简洁的访问硬件的能力,来实现并且提高基于MS-DOS平台应用软件的运行效果,并且为个人电脑硬件的革新扫除障碍。
另一方面,微软公司开发 DirectX 是为了在当前或今后的计算机操作系统提供给基于Windows 平台的应用程序以高表现力、实时的访问硬件的能力。DirectX在硬件设备和应用程序之间提供了一套完整一致的接口,以减小在安装和配置时的复杂程度,并且可以最大限度的利用硬件的优秀特性。通过使用DirectX所提供的接口,软件开发者可以尽情的利用硬件所可能带来的高性能,而不用烦恼于那些复杂而又多变的硬件执行细节。
一个高表现力的基于 Windows 平台的游戏将得益于以下几种技术:
- 专为提高图形运算及快速反应能力而设计的加速卡(Accelerator cards)
- 即插即用以及其它Windows软硬件
- 内建于Windows 的通信服务,包括DirectPlay
2.2、为硬件开发提供策略
DirectX的另外一个重要的目的是给硬件厂商提供开发策略,他们可以从高性能程序的开发者和独立的硬件供应商(independent hardware vendors IHVs)那里得到反馈。所以,在DirectX程序员参考书中有时可能会提供那些还不存在的硬件加速设备的技术细节。在很多时候,软件可以模拟这些特性,在另外一些情况下,软件根据硬件的指标判断出其特性,并且可以忽略那些硬件并不支持的性能。
3、DirectX的主体构成
DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的SDK包,它包含有Direct Graphics(Direct3D+DirectDraw)、DirectInput、DirectPlay、DirectSound、DirectMusic、DirectSetup、Direct Media Objects等多个组件,DirectX提供了一整套的多媒体接口方案。
名称 | 作用 |
Direct3D | 它为主流的桌上型计算机和 Internet 用户提供实时的、交互的3D技术。 |
DirectDraw | 通过直接访问显示硬件来提供高级的图象处理能力。 |
DirectPlay | 它明确的提供了通用环境连接能力( generalized communication capabilities)来简化应用程序之间的通讯服务。 |
DirectSound | 它提供了软硬件的低延迟声音混频(low latency sound mixing)和回放(Playback),硬件加速,以及直接访问音频设备的能力。 |
DirectMusic | 提供软硬件MID音乐的播放功能。 |
DirectInput | 它简化应用程序访问鼠标、键盘和操纵杆设备的能力。 |
DirectSetup | 提供了DirectX的一次性安装过程。 |
3.1、Direct3D
Direct3D 为大多数新视频卡安装的3-D调整颜色功能提供界面。Direct3D是低级的3-D API,它为应用程序提供与设备无关的方法以便与加速器硬件进行有效而强大的通讯。
Direct3D为程序开发人员提供了许多高级功能,如:
- 可切换的三度缓冲(使用z-buffer或w-buffer)
- 平面和Gouraud 阴影
- 多种光线和光线类型
- 丰富的素材和纹理支持功能
- 可靠的软件仿真驱动程序
- 变换和裁剪
- 与硬件无关
在音视频软件中可以使用Direct3D去绘制(显示)视频图像(也称播放视频图像),D3D经过多年的发展和完善,已经发布了多个版本。比如XP时代常用的D3D9,Win7时代的D3D11,以及最新的D3D12和D3D13,为了兼容Win7及以上操作系统,一般我们使用D3D11去绘制视频图像。
经过项目测试发现,在部分PC上使用D3D11播放视频图像会出现失败的问题,怀疑可能和显卡驱动有关,将出问题的PC的显卡驱动升级成最新的就没问题了。
3.2、DirectDraw
DirectDraw支持快速、直接访问计算机视频适配器的加速硬件功能。它支持在所有视频适配器上显示图形的标准方法,并且使用加速驱动程序时可以更快更直接地访问。
DirectDraw为程序(如游戏和二维 (2-D)图形程序包)以及 Windows 系统组件(如数字视频编解码器)提供与设备不相关的方法来访问特定显示设备的功能,而不要求用户提供设备功能的其他信息。
3.3、DirectPlay
DirectPlay支持通过调制解调器、Internet 或局域网连接的游戏。DirectPlay 简化了对通讯服务的访问,并提供了一种方法使游戏相互通讯而不受底层协议或联机服务的限制。
3.4、DirectSound
DirectSound提供了程序和音频适配器的混音及播放功能之间的链接。还支持波形声音的捕获和播放。DirectSound 为多媒体应用程序提供低潜伏混合、硬件加速以及直接访问声音设备。维护与现有设备驱动程序的兼容性时提供该功能。
3.5、DirectMusic
DirectMusic是DirectX的音乐组件。与捕获和播放数字声音样本的 DirectSound API 不同,DirectMusic 处理基于消息的音乐数据,这些数据是通过声卡或其内置的软件合成器转换成数字音频的。
除了支持音乐乐器数字接口 (MIDI) 格式的输入,DirectMusic 还为应用程序开发人员提供了创建能响应用户输入的嵌入式动态音轨的能力。
3.6、DirectInput
DirectInput为游戏提供高级输入并处理游戏杆以及包括鼠标、键盘和其他游戏控制器(如强力反馈游戏控制器)在内的其他相关设备的输入。
4、DirectX与COM组件
DirectX是基于COM的一套软件编程接口。部件对象模型(Component Object Model, COM)是OLE的基础。COM为OLE提供了编程模型和二进制标准。COM 定义并实现了软部件(如应用程序、数据对象、控件及服务)机制,并把它们统称为“对象”。每个软部件对象由数据以及访问数据的函数组成,访问软部件对象数据的函数的集合称为“接口”。
DirectX SDK接口被创建在COM编程层次表中很基础的一层。每一个代表设备的对象的接口,比如 IDirectDraw、IDirectSound、和 IDirectPlay,是直接从IUnknown OLE 接口中派生下来的。这些基本对象的创建被操作于在该对象的动态连接库中,要比用Win32中专门用来创建COM对象的CoCreateInstance函数要好得多。
特别的是,DirectX SDK对象模型为每一个设备提供一个主要的对象。其它的设备对象是由这个主要对象派生下来的。例如,DirectDraw对象代表显示设备。你可以用它来创建代表显存的主页面(DirectDrawSurface)对象,和代表硬件调色板的调色板(DirectDrawPalette)对象;相似的,DirectSound对象代表声卡,并且创建DirectSoundbuffer对象来代表声卡上的声音数据。
5、最后
本文对微软的DirectX做了一个大概的介绍,希望能给大家提供的一定的借鉴或参考。