Windows 多媒体编程库 DirectX 介绍

目录

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.mzph.cn/news/104778.shtml

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

相关文章

lvgl 界面管理器

lv_scr_mgr lvgl 界面管理器 适配 lvgl 8.3 降低界面之间的耦合使用较小的内存,界面切换后会自动释放内存内存泄漏检测 使用方法 在lv_scr_mgr_port.h 中创建一个枚举,用于界面ID为每个界面创建一个页面管理器句柄将界面句柄添加到 lv_scr_mgr_por…

机器学习基础之《回归与聚类算法(2)—欠拟合与过拟合》

一、背景 1、上一篇说正规方程的时候,实际情况中使用很少,主要原因它不能解决过拟合。 2、训练集上表现的好,测试集上表现不好—过拟合 二、欠拟合和过拟合 1、欠拟合 训练集:有3个训练集,告诉机器都是天鹅 机器学…

Docker 构建Python镜像时,pip使用国内地址的dockerfile模版

一、问题现象 构建镜像时,使用pip命令打包报错: 二、问题根因 因国内无法访问pip的配置文件中的仓库地址 三、解决办法 这个办法同样适用于:物理机,这个地址是阿里云的 pip config set global.index-url http://mirrors.aliy…

WebAPI+EF连接SQL Server数据库

右击解决方案-添加-新建项目-选择“类库(.NET Framework)”,新建的项目取名叫WebApi1.EF 添加EF: 新建一个ADO实体数据模型 选择DBFirst 数据源选择MySql 填写数据库地址及账号密码 选择实体框架版本 选择在数据库中的表User 到此配置完成&am…

稚晖君项目复刻:L-ink门禁卡(1)——环境搭建与第一个项目创建

行文目录 前言其他文章正文开始STM32CubeMX安装STM32CubeMX安装L0的固件支持包Clion安装OpenOCD安装MinGw安装arm-none-eabi-gcc安装Clion配置 创建STM32工程创建STM32CubeMX工程更改芯片型号 参考文献 前言 其实关于稚晖君的L-ink门禁卡在我本科阶段就已经刷过好几次了&#x…

基于STM32_DHT11单总线温湿度传感器驱动

基于STM32_DHT11单总线温湿度传感器驱动 文章目录 基于STM32_DHT11单总线温湿度传感器驱动前言一、DHT11?二、原理1.时序1.主机复位信号和 DHT11 响应信号2.信号‘0’的表示3.信号‘1’的表示4.整个数据信号收发流程 2.数据结构 三、驱动1 .h文件:2 .c文…

如何正确的关闭Redis服务器

Redis官方原生版本是在Linux平台上开发和测试的,但是大多数初学者都是使用Windows系统来学习如何开发的。因此,官方提供了一个叫做“Microsoft Open Tech Redis”的项目,该项目专门为Windows平台提供了一个官方支持的Redis版本,但…

智慧公厕:打破传统,解决城市痛点@中期科技

近年来,随着城市化进程的加速推进,智慧公厕成为人民生活质量提升的重要组成部分。作为一个富有创新和科技感的解决方案,智慧公厕不仅满足了人们对公共环境的要求,还提供了一系列便利的服务,让人们的生活更加舒适、便捷…

最新在线IDE流行度最新排名(每月更新)

2023年10月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧,那么TOP ODE索引可以帮助您决定在软件开发项目中…

Nginx解析漏洞

常见的解析漏洞&#xff1a; IIS 5.x/6.0解析漏洞 IIS 7.0/IIS 7.5/ Nginx <0.8.3畸形解析漏洞 Nginx <8.03 空字节代码执行漏洞 Apache解析漏洞 Nginx文件解析漏洞 对于任意文件名&#xff0c;例如:cd.jpg在后面添加/x.php后&#xff0c;即可将文件作为php解析。 原理…

Flink中的时间和窗口

Flink中的时间和窗口 在传统的批处理系统中&#xff0c;我们可以等到一批数据全部都到齐了之后&#xff0c;对其做相关的计算&#xff1b;但是在实时处理系统中&#xff0c;数据是源源不断的&#xff0c;正常情况下&#xff0c;我们就得来一条处理一条。那么&#xff0c;我们应…

函数栈帧的创建与销毁(保姆级讲解)

局部变量是怎么创建的? 在为main函数开辟栈帧空间时&#xff0c;在一定范围内初始化成0CCCCC&#xff0c;再把里面0CCCC的一些开辟空间给局部变量使用。 为什么局部变量的值是随机值? 因为我们在为main函数开辟栈帧空间时&#xff0c;会将一定范围内空间初始成0CCCCCC里面…

Avalonia使一个弹窗弹到指定位置

1.项目下载地址&#xff1a;https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia&#xff0c;项目地址 https://github.com/irihitech/Semi.Avalonia 3.样式预览 4.PositionControl.axaml <UserControl xmlns"https://github.com/avaloniaui&quo…

华为数通方向HCIP-DataCom H12-831题库(单选题:201-220)

第201题 如图所示,路由器所有的接口开启OSPF,链路的Cost值如图中标识。若在R2的OSPF进程中通过命令import-route direct type 1引入直连路由,则R1到达10.0.2.2 /32的Cost值是以下哪一选项? A、150 B、151 C、200 D、201 答案:C 解析: Loopback0的cost值默认为0,R1-R2的…

AI 律助 Alpha GPT 线上实操发布会,重磅发布!

数字化时代,随着人工智能的迅猛发展,各行各业都在积极探索通过智能化工具实现工作效率翻升的可能性。“ ChatGPT 类产品”是未来办公应用软件发展的重要趋势之一,但如何将 ChatGPT 真正应用于法律人的工作,赋能效率提升?法律行业同样面临着新的挑战和机遇。 破局的关键是实现技…

DevExpress Reporting中文教程 - 如何在macOS等系统中生成导出报表文档

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 在本文中&#xff0c;我们将讨论如何在.NET MA…

基于Java的二手车交易管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

访问控制列表ACL讲解——想偷偷访问数据,我ACL可不同意

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 梦想从未散场&#xff0c;传奇永不落幕&#xff0c;博主会持续更新优质网络知识、Python知识、Linux知识以及各种小技巧&#xff0c;愿你我共同在CSDN进步 目录 一、ACL的基本概念 1. ACL是什么 2. 为什么需…

从零开始学习 Java:简单易懂的入门指南之线程同步(三十五)

线程同步 1.线程同步1.1卖票【应用】1.2卖票案例的问题1.3同步代码块解决数据安全问题【应用】1.4同步方法解决数据安全问题【应用】1.5Lock锁【应用】1.6死锁 2.生产者消费者2.1生产者和消费者模式概述【应用】2.2生产者和消费者案例【应用】2.3生产者和消费者案例优化【应用】…

C++程序加速方法

C程序加速方法 1. 将反复使用的数据存放在全局变量里面2. 使用多线程3. 用a和a&#xff0c;a–,--a4. 减少除法运算5. 尽量减少值传递&#xff0c;多用引用来传递参数。6. 循环引发的讨论1&#xff08;循环内定义&#xff0c;还是循环外定义对象&#xff09;7. 循环引发的讨论2…