Windows 多媒体编程库 DirectX 介绍

news2024/11/26 0:51:45

目录

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++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具从入门到精通案例集锦(专栏文章正在更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/131405795C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html开源组件及数据库技术(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)icon-default.png?t=N7T8https://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做了一个大概的介绍,希望能给大家提供的一定的借鉴或参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1089620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python数据分析实战-实现T检验(附源码和实现效果)

实现功能 T 检验(Students t-test)是一种常用的统计方法,用于比较两个样本之间的均值是否存在显著差异。它可以应用于许多场景,其中一些常见的应用场景包括: A/B 测试:在市场营销和用户体验研究中&#xf…

【mmdetection代码解读 3.x版本】FPN层的解读

文章目录 1. forward函数1.1 self.fpn_convs的构建 1. forward函数 def forward(self, inputs: Tuple[Tensor]) -> tuple:assert len(inputs) len(self.in_channels)# build laterals laterals [lateral_conv(inputs[i self.start_level])for i, lateral_conv in enumer…

QMidi Pro for Mac:打造您的专属卡拉OK体验

你是否曾经厌倦于在KTV里与朋友们争夺麦克风?是否想要在家中享受自定义的卡拉OK体验?现在,有了QMidi Pro for Mac,一切变得简单而愉快! QMidi Pro是一款功能强大的卡拉OK播放器,专为Mac用户设计。它充分利…

机器学习(二)什么是机器学习

文章目录 什么是机器学习1.4.1确定是否为机器学习问题 1.5基于规则学习和基于模型的学习1.5.1基于规则学习1.5.2基于模型学习1.5.3房价预测问题 1.6机器学习数据的基本概念1.6.1机器学习数据集基本概念强化实践 后记 什么是机器学习 在开始讲解术语概念之前我们首先梳理下之前…

互联网Java工程师面试题·Java 并发编程篇·第三弹

目录 26、什么是线程组,为什么在 Java 中不推荐使用? 27、为什么使用 Executor 框架比使用应用创建和管理线程好? 27.1 为什么要使用 Executor 线程池框架 27.2 使用 Executor 线程池框架的优点 28、java 中有几种方法可以实现一个线程…

天猫用户重复购买预测(速通二)

天猫用户重复购买预测(二) 模型训练分类相关模型1、逻辑回归分类模型2、K近邻分类模型3、高斯贝叶斯分类模型4、决策树分类模型5、集成学习分类模型 模型验证模型验证指标 特征优化特征选择技巧1、搜索算法2、特征选择方法 模型训练 分类相关模型 1、逻…

基于Springboot实现商务安全邮箱邮件收发系统项目【项目源码+论文说明】

基于Springboot实现商务安全邮箱邮件收发系统演示 摘要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。计算机的优势和普及使得商务安全邮箱的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,采用jsp技术…

Altium Designer | 5 - 网表导入及模块化布局设计(待续)

导入常见报错解决办法(unknow pin及绿色报错等) 在原理图界面 CtrlF搜索元器件位号 在PCB界面,CtrlF是左右翻转, 快捷键JC才是搜索元器件位号 报错信息: Unknow pin 1.没有封装 2.封装管脚缺失 3.元件库对应的管脚不对 ... 常见绿色报…

一键部署开源AI(人工智能对话模型)(支持显卡或CPU加内存运行)--ChatGLM2-6B

一、基本介绍: ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性: 更强大的性能: 基于 ChatGLM 初代模…

盘点15个前端开源项目,yyds!

目录 1、vue-color-avatar2、Reader3、Ant Design4、小游戏2048(Vue版)5、跳一跳6、lifeRestart(人生重开模拟器)7、GOVIEW8、vlife9、网易云音乐 API10、饿了么11、QQ音乐 API12、ChatGPT API13、Node.js 最佳实践14、Awesome No…

云计算革命:多云管理与混合云的实践指南

文章目录 云计算的演进多云管理的优势1. 降低风险2. 提高性能3. 降低成本4. 提高安全性 实践指南1. 选择适当的云提供商2. 使用云管理平台3. 实施一致的安全策略4. 数据管理和迁移5. 自动化和编排 混合云的实践1. 私有云和本地数据中心2. 数据一致性3. 安全性和合规性4. 负载均…

IDEA启动报错Failed to create JVM. JVM path的解决办法

今天启动IDEA时IDEA报错,提示如下。 if you already hava a JDK installed, define a JAVA_HOME variable in Computer > Systen Properties > System Settings > Environment Variables.Failed to create JVM. JVM path:D:\ideaIU2023.2.3\IntelliJ IDE…

表单页面风格如何选择?弹窗 or 抽屉 or 页面?

一、类型介绍 在 PC 端项目中,用户触发了某个操作,当需要向用户展示新的内容时,有很多交互方式,弹窗、抽屉、页面就是其中典型的3种。下面来分析下3种交互方式的优势、劣势和使用场景。 1.1 弹窗 定义:分为模态和非模态对话框2种,常用的为模态对话框。 优势:在不离开…

AI项目十六:YOLOP 训练+测试+模型评估

若该文为原创文章,转载请注明原文出处。 通过正点原子的ATK-3568了解到了YOLOP,这里记录下训练及测试及在onnxruntime部署的过程。 步骤:训练->测试->转成onnx->onnxruntime部署测试 一、前言 YOLOP是华中科技大学研究团队在2021年…

2023软件测试面试题(亲身经历)

在职,5年测试经验,坐标广州,有点想666。于是进行了几场线上面试… 1、python有哪些数据类型 数字型:int/float/bool/complex 字符串:str 列表:list 元组:tuple 字典:dict 集合&…

云原生应用安全性:解锁云上数据的保护之道

文章目录 云原生应用的崛起云原生应用安全性挑战1. **容器安全性**:容器技术如Docker和Kubernetes已成为云原生应用的核心组成部分。容器的安全性变得至关重要,以防止恶意容器的运行和敏感数据泄漏。2. **微服务安全性**:微服务架构引入了多个…

从零开始使用webpack搭建一个react项目

先做一个正常编译es6语法的webpack demo 1. 初始化package.json文件 npm init一路enter下去 2. 添加插件 {"name": "demo","version": "1.0.0","description": "","main": "index.js",&q…

Springboot利用CompletableFuture异步执行线程(有回调和无回调)

目录 背景 实现 一、异步线程配置类 二、自定义异步异常统一处理类 三、实现调用异步(无回调-runAsync()) 四、实现调用异步(有回调-supplyAsync()) 五、异步执行错误异常示例 背景 项目中总会有需要异步执行来避免浪费…

Windows中将tomcat以服务的形式安装,然后在服务进行启动管理

Windows中将tomcat以服务的形式安装,然后在服务进行启动管理 第一步: 在已经安装好的tomcat的bin目录下: 输入cmd,进入命令窗口 安装服务: 输入如下命令,最后是你的服务名,避免中文和特殊字符 service.…

Redis数据类型及命令

目录 (一)通用命令(二)String类型(三)Hash类型(四)List类型(五)Set类型(六)SortedSet类型 在redis命令行查询redis通用命令&#xff1…