微软游戏编程接口———DirectX

openGL之API学习(七十一)Direct3D和DirectX Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,由微软公司所制定的3D规格界面,与Windows 95和Windows NT操作系统兼容性好,可绕过图形显示接口(GDI)直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度,是DirectX的一部分,目前广为各家显示卡所支援。与OpenGL同为电脑绘图软体和电脑游戏... 阅读详情
 当前几年Internet上叫喊可以控制我们的操作平台,但管不了我们玩什么的时候,微软开始了向游戏领域的进军。事实上,促使微软向这个领域进军的真正原因并不是这些反微软的言语,而是游戏娱乐业巨大的利润和美好的市场前景。微软不愧是微软,它并不仅仅是开发极具竞争力的游戏参与大堆游戏公司的竞争,而且开发了一个供所有开发者使用、基本上是免费的游戏开发平台———DirectX。

 

随着DirectX7.0的推出,也确立了DirectX在游戏标准方面不可动摇的地位。 DirectX 实际上是一个软件开发包,即DirectXSDK。它包括运行期文件和开发时所需要的头文件和库文件,我们平时玩游戏时所安装的DirectX实际上是它的运行期文件。Win98所谓的“多媒体功能更加丰富”就是因为内置了DirectX5.0的运行期文件。虽然DirectX的运行期文件也是一大堆的.dll和.lib文件,但是它的内部实现不同于一般的.dll,这主要是因为DirectX的代码开发符合COM组件规范,可以说Di-rectX是COM组件的集合,因此,在DirectX3.0下开发的游戏可以流畅地在DirectX6.0下运行也就不足为奇了。微软在刚刚发布的DirectX7.0中,加入了对VB开发的支持,而在这以前,游戏编程还是C /C ++程序员的专利。

DirectX 的“Direct ”实现了Windows 下不该实现的功能———直接访问硬件。众所周知,在Win d o ws 下,我们的操作不知经过Win d o ws 的多少抽象才能被硬件执行,而这也是Win d o ws 多任务与“相当稳定”的基础。DirectX违反Win d o ws 的规则了吗?因此有人批评微软的DirectX使Win d o ws 回到了DOS 时代。千万别相信这种话,微软不会这么笨。实际上,微软在Win-dows 与DOS 之间进行了折衷,提供了双方共有的优点。

一方面,DirectX提供了Win d o ws 编程时抽象的接口,使程序员可以不考虑特定的硬件,另一方面,Di-rectX提供了DOS 时代硬件的基本性能,用一句术语来说就是,DirectX“以设备无关的方法提供了设备相关的性能”。DirectX最大的发挥了硬件的优势,这主要应归功于它先进的实现结构。Di-rectX的底层实现分为HAL层(硬件抽象层,HardwareAbstraction Layer)与HEL层(硬件模拟层,Hardware Emu-lation Layer)。它们二者组合起来一起响应DirectX的请求,当DirectX对象创建时,它将查询相应的硬件并把硬件支持的操作填进HAL的兼容列表中。当我们使用DirectX的某项功能时,DirectX将首先查询HAL,若硬件支持这项功能,则直接让硬件去完成这项功能,否则让HEL层去模拟硬件处理。凡是硬件能做的,都让硬件去做,这的确发挥了硬件的优势,并且将激励硬件开发商去支持HEL层中的功能(无论如何,硬件支持总是要比软件模拟的快),从而又成为微软的标准,很妙的技术与很妙的商业手法!它们的结合正是微软成功的关键。 DirectX 包括下列组件:DirectDraw,Direct3D,Di-rectPlay,DirectInput,DirectSoun d,DirectSetup,Auto-play,从DirectX6.1开始又增加了DirectMusic。它们其实是各自独立的COM组件,但它们又是一个高水平游戏的开发过程中所不可缺少的部分。 DirectDraw 主要管理2D显示方面的事情。

Di-rectDraw字面的意思是“直接画”,用DOS 时代的术语是“直接写屏”,游戏开发者使用DirectDraw可直接操纵显卡上的显存,可把块显存想象为显示器的屏幕,利用硬件支持的诸如位图拷贝、覆盖、页面交换、透明和半透明、调色板处理等2D常用的技术在显存中处理图形,然后由显卡将显存中的内容显现在显示器上。而Win d o ws 中的GDI 函数(图形设备界面)不知要经过多少次Win d o ws 的“抽象”才能将图形搬到显存中。看看《红色警戒》《星际争霸》之类的游戏你就知道Di-rectDraw到底有多好的性能了。 Direct3D 分为立即模式(Immediate Mode)和保留模式(Retained Mode)。立即模式以DirectDraw对象为基础,是比较低级的3D图形接口,而保留模式则构建于立即模式之上,是较高级的3D图形接口。立即模式比保留模式更难用一些,不过如果用的好的话,可以获得很好的性能。保留模式封装了立即模式函数的接口,虽然更好用一些,但没有立即模式灵活。在刚刚推出的DirectX7.0中,Direct3D的性能得到了大幅的提高,并且增加了许多新的功能。据说,微软将在DirectX8.0中把OpenGL也集成进去,叫做Fahrencheit(这个名字是我刚从网上看到的),我们拭目以待吧。 DirectS ound 主要是录制和回放高性能的、实时的声音。如果在游戏中只有偶尔的一点声音,还不如用Win32API 的PlaySo u n d 函数。但如果在同一场景中出现几种声音(如在飞机的轰鸣声中出现爆炸声与开炮声),DirectSo u n d 就发挥它的优势了。

DirectSo u n d 可让程序员直接操纵声卡中的存储缓冲区(相当于显卡中的显存),利用声卡的硬件加速功能进行混音、播放。并且DirectSo u n d 还支持3D声音定位效果,能与Di-rect3D进行无缝的混合。表现这种效果最好的设备是头戴式耳机,千万别以为上千元的音箱在所有方面的效果都比耳机好。DirectSo u n d 所产生的效果是极其明显的,我试过播放一声音文件,用Win32函数PlaySo u n d 几乎占用了所有的CPU时间,使程序的其它功能完全丧失,而使用DirectSo u n d 后则对程序的其它功能影响微忽其微。 

DirectMusic 在DirectX6.1中被正式引入,它不同于DirectSo u n d 。DirectSo u n d 主要录制和播放的是.wav文件,即波形文件(实为采样声音文件)。Direct-Music播放的是音乐文件,例如MIDI 音乐、CD音轨。音乐文件与.wav文件的区别是音乐文件不像.wav文件一样可以放进声音缓冲区进行直接播放,音乐文件是按一定的格式存储的声音,如果想播放,还必须进行一定的转换。在DirectMusic产生以前,游戏中的背景音乐往往很难选择,MIDI 格式在不同的声卡上表现不一,读CD音轨时又不能访问光碟。DirectMusic相当于一个软硬兼施的波表合成器(如果硬件不支持,就用软件合成),可以将MIDI 之类的音乐文件转换成声音采样,然后传送给DirectSo u n d 播放(DirectSo u n d 的功能就是播放声音采样),从而在不同的环境下都可以正确地演奏出动人的音乐。DirectMusic还支持DLS标准(Downloadable Sounds,是MIDI Manufacturers Associ-ation推出的标准),它也可以播放符合DLS标准的文件,在以前,这可是只有在高级声卡上才能见到的功能。

在DirectX6.1的帮助文档中,可以看出微软推荐使用DLS标准。 Direct I nput 是对输入设备的支持,除了键盘、鼠标外,它还支持游戏杆。游戏杆是一个非常广的概念,我们平时玩游戏的小手柄是游戏杆,而一个复杂的汽车驾驶模拟装置也是一个游戏杆。在Win d o ws 编程中处理输入消息都是Win d o ws 干的,你按下一个键,Win-dows 接收到,再发送给程序,而DirectIn p u t 则越过了Win d o ws 的消息缓冲区,直接处理输入设备的输入。也就是说你按下一个键后,DirectInput将接收消息,由你自己去处理。 DirectPlay 为多人联网游戏提供了消息服务,同时还提供了启动和组织多人游戏的功能。再好的人工智能也比不上人的智能,在网络当道的今天,有哪个游戏不支持联网。又有哪个支持联网的游戏使用的不是DirectPlay。这主要是因为DirectPlay不考虑网络的传输介质,不管是用TCP /IP,IPX网还是用modem通过Internet的连接,DirectPlay都提供了相同的接口,这使得游戏通讯模块的编写容易了许多,并且又支持许多不同的网络,我们还有什么理由去拒绝DirectPlay呢? DirectSetup与AutoPlay 主要是使游戏的安装和使用更加方便,虽然这两个组件比其它的组件简单,但是它们所起的作用一点也不亚于其它的组件,因为“方便用户”是我们程序编写人员的最重要目标。

在我看来,DirectX的成功在很大程度上是因为DirectX的接口统一性,它使较小型的游戏软件公司有了更大的生存空间。在DOS 时代,每一个游戏开发者都得开发自己的显卡驱动程序以发挥不同显卡的优势。这样一来,小型的游戏软件公司往往很难跟上时代的步伐,当他们的游戏和驱动程序上市时,新的硬件已经上市了。若用DirectX开发,你就只用考虑游戏的设计而把驱动程序的设计留给微软或硬件开发商去做,当然,世界对微软的依赖又增加了许多。这样,当你的游戏用DirectX的某个版本开发,而DirectX的这个版本又支持比如AMD公司的3Dn o w。指令的话,那么你就可以宣称你的游戏针对AMD公司的CPU做过优化,实际上,大多数游戏公司可能也是这么做的。可以看出,DirectX的技术优势在于它的“直接访问硬件”,DirectX还有一个重要的优势———集成。也许(是“也许”)OpenGL的3D性能可以超过DirectX中的Direct3D,但它缺乏与Win d o ws 的集成,缺乏完成一个游戏必需的其它功能部件,并且我写这篇文章的时候我已经开绐怀疑到底是谁更好一些。微软的优势是集成,其实,集成确实很好,大多数的游戏公司也把DirectX当成了自己的游戏编程接口。

                                                                                                                    来源:电脑爱好者

DirectX游戏开发终极指南 - 两部分完整版 本文还有配套的精品资源,点击获取 简介:DirectX是为Windows多媒体和图形开发设计的应用程序接口套件。该指南分为两部分,介绍DirectX的各组件如Direct3D、DirectDraw、DirectInput、DirectSound和DirectPlay,及其在游戏开发中的应用。用户需下载完整才能获取全部内容,内容可能包括3D图形渲染、2D图形加速、输入设备支持... 阅读详情

相关推荐

掌握DirectX:游戏开发者的图形与声音革命

本文详细介绍了DirectX的核心功能,包括其对硬件的全面支持和在游戏开发中的作用。从DirectX的起源到DirectX 8.0的特性,文章深入探讨了DirectX如何简化游戏编程并推动了游戏技术的发展。同时,文章还探讨了DirectX在2D和3D游戏开发中的应用,以及如何在VB中使用DirectX进行游戏编程。

weixin_35294091的博客 844

DX基础 | DXGI(DirectX Graphics Infrastructure)

MSDN DXGI Overview DXGI是windows系统中用户模式下最底层的图形设备接口. DXGI 直接与硬件驱动打交道. DXGI对上提供a common framework for future graphics components. 应用程序可以直接访问DXGI. 或者通过Direct3D的API来访问,这些API帮你与DXGI进行通信. 如果你的应用需要枚举设备或者想要...

【黑键】 5753

深入解析DirectX编程接口

本文通过分析书籍提供的章节内容,深入探讨了DirectX编程接口中的一些关键过程、函数和事件。详细解读了DirectInput、DirectMusic和DirectPlay等组件的功能和使用场景,为开发者提供了理解和应用这些接口的全面视角。

weixin_32869687的博客 336

DirectX 图形接口指南

                            DirectX 图形接口指南                                         作者:译:In355Hz 译者申明:这些指南是我在阅读 DirectX8.1 SDK 中逐步翻译出来的。对于初次接触 DirectX Graphics 的编程者而言,这应该是很好的上手资料。其实,本人就是从这些指南开始深入 Direc

1566

Direct3D 6.1 立即模式

Direct3D 6.1 立即模式 ,虽然比较老,但是一些基础的东西还是不错的,大家由兴趣可以看看

《DirectX+游戏开发终极指南》exe电子书+网页版+源码

《DirectX+游戏开发终极指南》exe电子书+网页版 很不错的一本书,附带有全部源码,加电子版和网页版的书,文件较大 三个压缩分卷

[收藏]播放MIDI音乐——使用DirectMusic

(本文对象:DirectMusic初学者,想快速知道使用DirectMusic播放音乐的人) 原作者By Kylinx,2003-5-15,E-mail:game-diy@163.com 整理:风里有梦(转载请保证文档的完整性) 在DirectX8~9 SDK 中,DirectMusic增加了很多新特性,我在这里单单讲用它播放Midi的部分 DirectMusic主要有下面几个部分

懒骨头 2817

基于DirectX游戏编程实例

自己写的一点东西,还是菜鸟级别,嘻嘻,多多指教

DirectX基础之简介

DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360电子游戏开发,并且只能支持这些平台。最新版本为DirectX 11,创建在最新的Windows 7上。 DirectX简...

weixin_30892037的博客 485

目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)

但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 128

Windows 10/11下Drive Composer Pro 2.9.0完整安装与连接ACS880变频器实战教程

本文详细介绍了在Windows 10/11系统上安装Drive Composer Pro 2.9.0并连接ACS880变频器的完整教程。从系统环境准备、软件安装到许可证配置,再到USB、蓝牙和以太网三种连接方式的实战操作,帮助工业自动化工程师快速掌握ABB变频器的调试技巧。

weixin_32956805的博客 527

directx9.0安装详细教程

DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。小提示:有许多游戏,如果不安装DirectX,运行游戏可能会有如下报错:如《永恒之塔》对于每一台安装《永恒之塔》客户端的PC机,安装DirectX9.0C以上版本都是必须的。以下是DirectX的下载及...

smddw的博客 1611

避坑指南:CST粒子工作室Track Solver常见的5个参数设置错误

本文深入剖析了CST粒子工作室中Track Solver在电子枪仿真时常见的5个关键参数设置错误,包括空间电荷模型选择、发射源定义、材料边界处理、监视器配置及求解器稳定性设置。通过对比错误与正确做法,帮助用户避开陷阱,确保粒子追踪仿真的物理准确性与数值稳定性,从而获得更精准的电子枪仿真结果。

dapp9builder的博客 486

先了解了解DirectX

           DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360电子游戏开发,并且只能支持这些平台。最新版本为DirectX 11,创建在最新的Windows 7上。           Dir

CMsnow的专栏 510

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优

本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。

weixin_30791095的博客 224

深度解析 Android 开发工程师岗位:技术栈、职责与面试全攻略

本文深度剖析Android开发工程师职位要求,从核心技术栈到面试准备进行全面解读。关键点包括:1)掌握Kotlin语言特性和Jetpack组件;2)具备UI开发、性能优化和逆向分析能力;3)理解MVVM架构和Room数据库;4)熟悉常用工具链和开发流程。文章提供了详细的面试题库及解析,涵盖基础概念、UI优化、架构设计等方向,并给出职业发展建议:夯实基础、拓展技术广度、培养工程素养。旨在帮助开发者系统性地准备Android岗位求职,把握移动开发领域的技术趋势。

郑伟强dev的专栏 173

DirectX简要说明

DirectX 多媒体编程接口   DirectX 4大接口:显示 声音 输入 网络  查看DirectX版本 运行里面输入dxdiag                             

weixin_42143003的博客 164

《YOLOv8:从入门到实战》专栏介绍 & 专栏目录

本专栏涵盖了丰富的YOLOv8算法从入门到实战系列教程,专为学习YOLOv8的同学而设计,堪称全网最详细的教程!🌈🌈🌈

小哥谈 6489

DirectX简单了解

今天在安装监控录像服务器端的时候提示,缺少DirectX组件。当时一看就傻眼了,这是个什么东东啊,我怎么从来没有见过,也没有听过啊!最后我网上一查。原来DirectX是由微软公司创建的一种多媒体编程接口。这样听起来还是有一些抽象,那我们下面来具体的了解下。 官方解释:DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循CO

数据实验室 1670

【AI 赋能:Python 人工智能应用实战】16. BERT微调实战:中文新闻分类全流程(附模型蒸馏+ONNX部署完整代码)

中文新闻分类是NLP领域的经典实用任务,BERT模型凭借双向上下文建模能力,能有效解决中文歧义与长文本依赖问题,但存在推理速度慢、资源占用高的痛点。本文以THUCNews中文新闻数据集为核心,提供从数据预处理、BERT微调、模型蒸馏到生产部署的全流程实操指南。首先详解THUCNews的多编码读取与清洗(解决gbk/utf-8兼容问题);然后实现BERT微调,加入早停机制与混淆矩阵可视化,验证准确率达93.8%;接着用DistilBERT完成模型蒸馏,在仅损失0.6%准确率的前提下,将推理速度提升2.7倍。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1098

eCognition易康操作教程(一):如何利用eCognition易康软件进行影像分割之棋盘分割、四叉树分割、光谱差异分割

进程执行完成后,植被覆盖区域与裸地区域合并了。第三步:清除分割结果,点击“Image Objects”菜单栏,点击“Delete Level(s)”,选中“ResultLevel1”,点击”ok”删除棋盘分割结果。四叉树分割之后,有的正方形大一些,有的正方形小一些,大说明该区域的光谱特性更加均一,而小说明不太均一。Leve:选择运行算法的矢量层名称,这里选择四叉树分割算法得到的矢量层“ResultLevel2”。Image Layer weights:图层权重,这里设置为“1,1,1,1”。

蒹葭苍苍 4608

DirectX wiki

DirectX(Direct eXtension,缩写:DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。其API包含DirectX Graphics、DirectPlay、DirectSound、DirectInput、DirectSetup等部分(Direct3D与DirectDraw已集成成DirectX Graphics)、DirectMusic、Direc

analyst_yuci 1617

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

DirectX10怎么下载和安装,DirectX10丢失的几个有效修复方法

DirectX 10 是微软推出的一套用于 Windows 操作系统的多媒体编程接口。为 Windows 平台上的图形和多媒体应用提供了更强大的支持,推动了游戏和相关领域的发展。

Cybertronnnnnn的博客 2686

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

directx 9.0 3d游戏开发编程基础_新装的系统,电脑老是报错玩不了游戏,DirectX修复工具一键搞定...

Hello大家好,我是兼容机之家的小牛!很多小伙伴在安装完游戏以后,会出现微软DirectX报错的提示,说什么“发生了未知的directX错误,某某某游戏无法启动。请确保你的显卡更新了最新的显卡驱动”。那么遇见这样的问题的时候,我们该怎么办呢?要修复这个问题,其实也很简单,不过在此之前,我还是​带大家来了解一下何为directX,DirectX又有何作用。根据某度百科的信息表示,DirectX(D...

weixin_32418703的博客 516

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: java面试题
下一篇: DirectX游戏编程与C#
appboy
博客等级 码龄19年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值