当前位置: 首页 > article >正文

DirectX 入门知识

目录

一、DirectX 简介

1、检查DirectX 版本

2、D3D示例

二、基本概念了解

1、对设备的理解:

1)硬件设备(hardware device)

2)WARP设备(WARPdevice)

3)参考设备(reference device)

4)软件驱动设备(software driverdevice)

2、对交换链swapchain的理解

1)对撕裂现象的理解

2)Direct3D 提供两种避免撕裂的选项:

3)对交换的理解


一、DirectX 简介

DirectX 是 Windows 中的一组组件,允许软件(主要且尤其是游戏)直接与视频和音频硬件结合使用。  使用 DirectX 的游戏可以更有效地使用内置于硬件的多媒体加速器功能,从而改善你的整体多媒体体验。 

1、检查DirectX 版本

Windows 10

  1. 从“开始”的搜索框中键入 dxdiag,然后按 Enter 键。

  2. 从结果中点按或单击 dxdiag

  3. 在“系统信息”部分中报告的第一页上检查“DirectX 版本”。

2、D3D示例

微软d3d 示例 仓库

GitHub - microsoft/DirectX-Graphics-Samples: This repo contains the DirectX Graphics samples that demonstrate how to build graphics intensive applications on Windows.

二、基本概念了解

不了解D3D的一些概念,直接看代码,简直就如天书一般,所以才入学者,以了解基本概念为主

1、对设备的理解:

在Direct3D 中我们能使用的设备有硬件设备(hardware device),参考设备(reference device),软件驱动设备(software driver device), 以及WARP设备 (WARP device)。

1)硬件设备(hardware device)

       是一个运行在显卡上的D3D设备,在所有设备中运行速度是最快的。这将是我们日后讨论最多的一种类型。

2)WARP设备(WARPdevice)

       是一种高效的CPU渲染设备,可以模拟现阶段所有的Direct3D特性。WARP使用了Windows Vista /Windows 7/Winodws 8中的Windows Graphic 运行库中高度优化过的代码作为支撑,这让这种方式出类拔萃,相比与上文提到的参考设备(reference device)模式更加优秀。WARP设备在配置不高的机器上面可以达到化腐朽为神奇的功效。在我们的硬件不支持实时应用程序(real-time application)的情况下,用WARP设备作为替补是一个明智的选择,因为相比而言,参考设备(reference device)的执行效率实在是无法令人恭维。即便如此,WARP设备的执行效率还是不能和硬件设备同日而语,毕竟它依旧是对硬件的一种模拟,即使这种模拟是非常高效的。

3)参考设备(reference device)

         是用于没有可用的硬件支持时在CPU上进行渲染的设备。

         简言之就是利用软件,在CPU对硬件渲染设备的一个模拟。但是不幸的是,这种方式非常的低效,所以在开发过程中,没有其他可用选择的时候,我们才采用这种方式。比如新一代的DirectX发布了,市面上还没有支持这种新版本DirectX的硬件,我们在开发过程中就只能采用这种方式来跑了。

4)软件驱动设备(software driverdevice)

      是开发人员自己编写的用于Direct3D的渲染驱动软件。这种方式通常不推荐用于高性能或者对性能要求苛刻的应用程序.

参考:

Direct3D 11入门级知识介绍 - jack船长大哥 - 博客园

2、对交换链swapchain的理解

交换链是用于向用户显示帧的缓冲区集合。 应用程序每次提供要显示的新帧时,交换链中的第一个缓冲区将替代已显示的缓冲区。 此过程称为交换或翻转。

1)对撕裂现象的理解

      图形适配器有一个指向图面的指针,该图面表示监视器上正在显示的图像,称为前台缓冲区。 随着监视器不断刷新,图形卡会将前台缓冲区中的内容发送至监视器进行显示。 但是,这会导致呈现实时图形时出现问题。 该问题的核心是,监视器刷新频率与计算机其余部分相比非常缓慢。 通常刷新频率介于 60 Hz(每秒 60 次)到 100 Hz 之间。 如果你的应用程序在监视器刷新过程中更新前台缓冲区,显示的图像将被截成两半,上半部分包含旧图像,下半部分包含新图像。 此问题被称为撕裂。

2)Direct3D 提供两种避免撕裂的选项:

       一种选项只允许监视器在垂直回扫(或垂直同步)操作时更新。 监视器刷新图像的方式通常是水平移动光针,从监视器左上角开始,Z 字形移动到右下角。 光针达到底部后,监视器将重新校准,将其移回左上角,重新开始刷新过程。 此重新校准过程称为垂直同步。在垂直同步期间,监视器不会绘制任何内容,因此在监视器再次开始绘制之前,不会看到对前台缓冲区所做的任何更新。 垂直同步相对较慢,但是,还不足以在等待时渲染复杂场景。 若要避免撕裂,同时能够渲染复杂场景,则需要进行后台缓冲。

       一种选项使用后台缓冲技术。 后台缓冲是向屏幕外图面(称为后台缓冲区)绘制场景的过程。 请注意,除前缓冲区以外的任何图面都称为屏幕外图面,因为它从未由监视器直接查看。 通过使用后台缓冲区,应用程序可以在系统空闲时(即没有正在等待处理的 Windows 消息时)自由渲染场景,而无需考虑监视器刷新频率。 后台缓冲带来了另一个问题:如何以及何时将后台缓冲区移至前台缓冲区。

3)对交换的理解

       后台缓冲区移至前台缓冲区的过程称为图面翻转。

       由于图形卡只使用指向代表前台缓冲区的图面的指针,所以只需更改指针就可以将后台缓冲区移至前台缓冲区。

       当应用程序要求 Direct3D 将后台缓冲区显示到前台缓冲区时,Direct3D 只需“翻转”两种图面指针。 结果是后台缓冲区变成新的前台缓冲区,而旧的前台缓冲区则变成了新的后台缓冲区。

      每当应用程序要求 Direct3D 设备显示后台缓冲区时,就会调用图面翻转;但是,可以将 Direct3D 设置为将请求加入队列,直到发生垂直同步。 此选项称为 Direct3D 设备的显示间隔。 请注意,新的后退缓冲区中的数据可能不可重用,具体取决于应用程序如何指定 Direct3D 如何处理图面翻转。

       图面翻转在多媒体、动画和游戏软件中非常关键;其原理相当于用一沓纸来制作动画。 在每页纸上,艺术家对图形稍加改动,当你快速翻动纸张时,图画就会呈现出动画效果。

参考:

什么是交换链? (Direct3D 9) - Win32 apps | Microsoft Docs

Direct3D 11入门级知识介绍 - jack船长大哥 - 博客园

使用 DirectX 设备资源 - Win32 apps | Microsoft Docs

http://www.lryc.cn/news/2416145.html

相关文章:

  • IIS管理器安装和配置教程
  • 【静态网页制作大作业——个人博客搭建(HTML+CSS+Javascript)】
  • IIS7配置防盗链
  • Exchange2007-Exchange2010升级-08 Exchange2010的最后配置和数据迁移
  • sourceforge下载慢解决方法
  • vs2008安装_编程莫愁,IT莫愁,这里有Visual Studio 2008软件安装教程
  • dnf鹰犬boss机器人_dnf鹰犬boss怎么打
  • 2024年值得关注的几款开源免费的web应用防火墙
  • 怎样停止phpnow服务
  • Web Service详细解析及使用方
  • 荣耀畅玩5a android5.0,华为荣耀畅玩5A有几个版本?华为荣耀5A各版本区别对比介绍...
  • 简单的多条件分页查询
  • springboot(16)Spring Boot使用单元测试
  • Exchange2010安装配置
  • 以太坊地址和公钥_秘密!以太坊安全之 EVM 与短地址攻击
  • 一个ActiveSync无法连接的解决方法
  • notifyDataSetChanged() 和 notifyDataSetInvalidated()
  • asp、php、asp.net、jsp介绍及优缺点比较
  • spss——主成分分析详解
  • 排查IOException Broken pipe 错误
  • Windows窗口下的命令
  • 程言序语之“朱古力”
  • Linux【shell命令以及运行原理】【权限】
  • 无密码卸载诺顿杀毒软件的方法
  • JS高级—call(),apply(),bind()
  • 网页中如何显示版权符号
  • Msn机器人要屏蔽安装msnshell插件的系统消息的方法
  • adobe flash player debug 官方 下载 地址
  • Java中的Socket的用法(普通Socket,NioSocket)
  • Input框属性输入汉字,数字的控制技巧