翻译 managed DirectX9(第二章)

Managed DirectX 9(中文版) Managed DirectX 9(中文版)是受欢迎的directx教材,此版为中文版 立即下载

  作者:clayman
仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。
Blog:http://blog.youkuaiyun.com/soilwork
clayman_joe@yahoo.com.cn

第二章 选择正确的 Device
        如今,市场里有大量不同类型的显示卡,记住每种显卡所支持的特性几乎时不可能的。你应该询问 device ,让它告诉你它所支持的特性。我们接下来将讨论:
                   枚举系统里所有的适配器( adapter )
                   枚举每一个 device 所支持的格式
                   确定所列举的设备功能
 
 
枚举系统里的适配器
      如今的大多数系统都支持多显示器。虽然这还不是主流配置,但多显示器确实很有用,并且变的越来越流行。在过去,这是高端图形卡专有的功能。但现在 ATI , nVidia 以及 Matrox 都支持让多台显示器共享一块显卡的多头显示技术。
         Direct3D 的 device 必须指定给每一个适配器。在这里,你可以把“适配器”理解为一块链接了特定显示器的显卡。比如 ATI Radeon 9700 的显卡只是一块物理适配器,但它有两个显示器接口( DVI 和 VGA ),因此,在 Direct3D 里,它有两个适配器。也许你不知道选哪一个,甚至不确定有多少 device 在运行游戏的系统里,那么怎样来检测它们并且选择正确的一个呢?
         在 Direct3D 里,一个叫做 Manager 的静态类可以简单的完成以上任务:枚举适配器和 device 的信息;获得系统里 device 所支持特性的信息。
         Manager 类最重要的属性就是适配器的列表。在许多地方都会用到这个属性。它有一个“ count ”成员储存了系统里适配器的数量。因此,可以直接用索引访问适配器( e.g. Manager.Adapters[0] ) , 也可以枚举出系统里所有适配器。
         用一个简单的程序测试一下这个功能,它将以树状结构显示出系统里的适配器,以及他们所支持的显示模式:
1.   创建新的 C# Windows Formd 工程;
2.   添加 DirectX 组件;
3.   创建一个 TreeView 控件,并且占满整个窗口:把 Dock 属性设置为 fill
好了,现在该加入扫描每一个适配器,显示所支持的每一种显示模式的函数了:
Public void LoadGRaphics()
{
         foreach(AdapterInformation ai in Manager.Adapters)
         {
                   treeNode root = new TreeNOde(ai.Information.Description);
                   treeNode driverInfo = new TreeNode(string.Format(“Driver information:{0} – {1}”, ai.Information.DriverName, ai.Information.DriverVersion) );
                   root.Node.Add(driverInfo);
treeNode displayMode – new TreeNodeJ(string.Format(“Vurrent Display Mode:{0} × {1} × {2}”, ai.CurrentDisplayMode.Width, ai.CurrentDisplayMOde.Height, ai.CurrentDisplayuMode.Format) );
                   foreach(DisplayMode dm in ai.SupportedDisplayModes)
                   {
                            treeNode supportedNode = new TreeNode(string.Format(“Supported:{0} × {1} × {2}”, dm.Width, dm.Height, dm.Format) );
                            displayMode.Nodes.Add(supportedNode);
                   }
root.Nodes.Add(displayMode);
treeView1.Node.Add(root);
}
}
虽然代码看起来有一点点多,但它所做的事情实际上是非常简单的。你可以先分开来看看我们都作了些什么。首先,我们枚举系统里的适配器。 C# 的 Foreach 迭代器使这个过程异常的简单。对每一个适配器来说,这个循环都只执行一次,并且用给定的适配器填充 AdapterInformation 结构。观察一下 AdapterInformation 结构,有以下几个成员
Public struct AdapterInformation
{
int adapter;
DisplayMode CurrentDisplayMode;
AdapterDetails Information;
AdapterDetails GetWhqlInformation();
DisplayModeEnumerator SupportedDisplayModes;
         }
这里 adapter 成员指创建 device 时的适配器序数。序数是一个基于 0 的索引,并且序数的个数等于系统里适配器的个数。两个返回 AdapterDetails 结构的成员都使用同一个方法返回同样的结果。对 Information 成员来说, Windows Hardware Quality Labs ( WHQL )并不返回细节,而 GetWhqlInformation 却可以。获得这些信息要花费一些代价及事件,所以我们把它分成了两部分。
AdapterDetails 结构保存了适配器的大量信息,包括对适配器自身的描述以及驱动信息。虽然这不是一定会用到的,但应用程序却能依次作出对硬件类型的判断。
剩下的两个成员返回 DisplayMode 结构。这些结构包含了大量的显示模式,包括显示的高度和宽度,刷新率以及使用的格式。 CurrentDisplayMode 返回当前的显示模式, SupportedDisplayModes 返回适配器所支持的模式的列表。
So ,我们用从 Information 属性获得的对 device 的描述作为 tree view 的根节点。然后加入了一个表示驱动程序名字以及版本号的子节点。同样也加入了一个显示当前显示模式的子节点,并且在这个子节点下列出了所有支持的显示模式。
运行程序,可以看到包含了所有支持模式的列表。填充 present parameter 结构时,这些模式都能当作正确的后备缓冲格式。每一个枚举出来的模式后面都有一个以固定模式显示的字符串( e.g X8R8G8B8 ) , 字母和数字交替出现。字母表示了数据的类型,数字表示这种类型的数据所占的位数。下边是常见的字母:
A ―― alpha        B ―― blue           X---unused          L----luminance    R----red     P----palette        G---green
(虽然有很多种格式,但只有几种能正确的用于后备缓冲以及显示模式。可用于后备缓冲的模式包括: A2R10G10B10, A1R5G5B5, A8R8G8B8, X1R5G5B5, X8R8G8B8, R5G5B5; Display formats can be the same as the back buffer formats, with the exception of those that contain an alpha component . The only format that can be used for a display weith alpha is A2R10G10B10 , and even then that’s only in full-screen mode. )
每种类型所占的位数加起来,就是这种格式的总大小。比如 X8R8G8B8 ,就是 32 位的格式,红、绿、蓝各 8 位,还有 8 位没有使用。
至今为止,我们获得了要创建的适配器序数,要支持的后备缓冲格式,那么关于 device 构造函数的其他参数呢?很幸运, Manager 类有我们所需的一切。
 
 
判断哪一个设备是可用的
manager 类有许多方法可以用来检测你的适配器是否支持一个特定的功能。比如,你需要检测适配器是否支持一种特殊的格式,但又不想枚举所有可能的适配器以及格式,那你就可以用 manager 类来解决这个问题。使用如下的方法:
pubic static System.Boolean CheckDeviceType(int adapter, DeviceType checkType, Format DisplayFormat, Format backBufferFormat, bool windowed, int result)
这个方法可以快速的检测出 device 是否支持你将要使用的格式。第一个参数是你要检测的适配器序数;第二个是要检测的 device 类型,但这个值大多数情况下都被设置为 DeviceType.Fardware 。接着指定将使用的后备缓冲类型和显示格式,以及是否需要全屏显示。最后一个参数是可选的,如果使用的话他将返回关于这个方法的一个整数(即 COM 中的 HRESULT )。如果这是一个有效的设备,则方法返回 true ,否则为 false 。当你预先知道要使用的格式使,这个方法是很有用的。
(应该注意到,在窗口模式,后备缓冲的格式不一定要匹配于显示格式,只要你的硬件支持适当的颜色转换就可以了。不论你的硬件是否支持这种功能, CheckDeviceType 方法都会返回适当的结果,应该使用 manager 类的 CheckDeviceFormatConversion 方法来判断是否支持这种转换。也可以在窗口模式下使用 Format.Unknown 。全屏模式下不需要这种转换。)
 
 
检测 Device 的功能( capabilities )
我们把每一个 device 能完全用硬件实现的功能都叫做“ capability ”,或简称做“ Cap ”。 Direct3D 有一个 Caps 结构可以列出 device 所支持的每一种可能的 capabilities 。创建了 device 之后,就可以使用 device 的 Caps 属性来检测他所支持的特性,但如果在创建设备之你就想知道 device 所支持的特性该怎么办呢?自然, Manager 类也有一个方法能完成这个任务。
现在,先前的程序里加一点点代码来获得系统里每一种适配器的 capabilities 。我们将不再使用 tree view 来显示这些 capabilities ,应为这可能包含了数百种 capabilities 。最好的方法是使用一个 text box 。回到 windows form 的设计模式,把 tree view 的 Dock 属性改为“ Left ”,把宽度改为现在的一半;入 text box 控件,把 Dock 属性设置为“ Fill ”, Multiline 设置为 true , Scrollbars 设置为“ both ”。
现在你可能想为程序添加一个钩子( hook ),这样在选择了一个适配器之后, textbox 里的数据也会更新。使用 tree view 的 AfterSelect 事件,添加如下代码:
private void treeView_1AfterSelect(object sender, System.Windows.Forms.TreeViewEcentArgs e)
{
         if (e.Node.Parent == null)
         {      
                   textBox1.Text = e.Node.Text + “Capabilities: /r/n/r/n” + Manager.GetDeviceCaps(e.Node.Indes, DeviceType.Hardware).ToString().Replace(“/n”, “/r/n”);
         }
}

如你所见,相当简单。运行一下看看结果吧。

十.镜头知识之畸变问题 对于理想光学系统,在一对共轭的物像平面上,像的放大率是一个常数。但是对于实际的光学系统,当视场较大或很大时,像的放大率就要随视场而异,这样就会使像相对于物体失去相似性。这种使像变形的成像缺陷称为畸变。 阅读详情

相关推荐

从‘炼丹’到‘讲理’:物理信息神经网络(PINN)的硬约束 vs 软约束,我该选哪个?

本文深入探讨了物理信息神经网络(PINN)中硬约束与软约束的选择策略,帮助研究者在深度学习中有效融入物理先验知识。通过对比两种约束方法的实现复杂度、数据效率和计算性能,提供了针对材料科学和流体动力学等领域的实用决策指南,并介绍了自适应约束和混合约束等前沿技术。

weixin_42535703的博客 526

MediaCreationTool工具重装win10系统(小白专用)

注意重装系统会重置C盘所有内容以及桌面文件,重装系统注意文件备份 一、系统下载 下载MediaCreationTool工具:点击下载 1.下载成功后双击运行,点击接受条款。 2.选择为另一台电脑拆功能键安装介质,然后下一步。 如果抱着电脑卡顿重装电脑就不要选择第一项,这样不会有任何效果,甚至会更卡 3.这里可以不用修改直接点击下一步。 这里其实是选择系统安装的语言(语言不用说了吧,过6级可选英文)、win10版本(专业版、企业版等)、结构(平时说的32位系统、64位系统)的 4.选择ISO.

qq_40690077的博客 17万+

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 269

如何使用微软官方工具MediaCreationTool来制作Windows10启动盘

上次我说过了如何用微PE来重装系统,有很多人不太放心PE的安装,那这次我们就来学习一下用微软官方的工具来制作启动盘,重装系统。 你要准备的工具有: 一台可以正常使用并且联网的电脑 一个不小于8G的U盘 准备好了之后就可以开始。 一、下载系统ISO镜像文件 还是从MSDN下载,可以下载最新的Windows10 1909版本,之前说过这里不再赘述,记得校验哈希值,保证文件无错。 二、下载MediaCr...

Rxe的博客 2万+

YOLOv11 改进策略 | HWD:引入 Haar 小波变换,减少信息丢失

在卷积神经网络(CNN)中,下采样(Downsampling)是降低特征图分辨率、扩大感受野的关键操作,通常通过最大池化(MaxPool)或步长为 2 的卷积(Strided Convolution)实现。然而,这些方法在降低分辨率的同时,往往会丢失图像中的高频细节信息(如边缘、纹理)和精确的空间位置信息,这可能对后续特征提取和目标检测精度产生不利影响,尤其是对于小目标和需要精细定位的任务。

走向CTO的路上... 1788

当OTN网络遭遇LOS告警:5个运维老手才知道的故障定位技巧(含CA动作对照表)

本文深入解析OTN网络中LOS告警的实战定位技巧,涵盖光功率深度诊断、模块差异分析及核心的CA动作机制。通过逆向追踪告警流与对照速查表,帮助运维人员快速锁定故障段落,区分硬软故障,并掌握系统健康度评估方法,从而提升排障效率与网络稳定性。

weixin_29266007的博客 551

电脑系统损坏,备份文件

1.U盘:8G以上就够用,注意会格式化U盘,提前备份U盘内容2.电脑:下载Windows系统并进行启动盘制作。

左右-HPU 1997

【PDN仿真笔记9-使用Sigrity PowerDC进行IR Drop仿真的方法】

使用Sigrity PowerDC进行IR Drop进行仿真的方法

qq_42682826的博客 8000

基于MediaCreationTool的Windows10_64位系统安装

Windows操作系统是现下主流的操作系统,使用者极多。在使用中,系统难免会发生崩溃,或者想重新整理一下系统,此时重装系统是最好的、快刀斩乱麻式的解决办法。

SPARKS_KEN的博客 9002

Web前端开发技术:实验14-16

实验14 1. 编写JavaScript程序实现“九九乘法口诀”表,如图14-40所示。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>九九乘法表</title> </head> <body> <h1>九九乘法表</h1> </body> <scri

KslgmrDry的博客 1万+

QT窗体大小控制全攻略:从setFixedSize到事件过滤器的进阶用法

本文深入探讨了QT窗体尺寸控制的进阶实践,从基础的setFixedSize方法到结合事件过滤器实现智能动态适配。通过分析窗口状态变化、多显示器环境处理以及布局策略,提供了实现禁止缩放但支持最大化、多屏智能适配及动态约束等复杂场景的完整解决方案与核心代码示例。

weixin_29229261的博客 299

【系统安装】MediaCreationTool工具制作U盘安装win10系统

系统安装

子非鱼的博客 1万+

微信小程序 - 获取当前日期时间(函数封装)

效果图 前言 摘自微信小程序demo程序中utils.js方法。 普通newDate()出来的日期时间,并不是我们想要的格式,所以要进行格式整理。 解决方案 打开utils.js文件(随意),复制以下代码: /** *获取当前时间 *@description自定义日期分钟秒数 *@param{Object}date-newData()对象 *@returnString */ functionformatTime(date){ //年月日

🏆 前端领域优质创作者 2843

Managed DirectX +C# 开发(入门篇)(一)

  前      言以前是用VC 作计算机图形学的,大约在一年前,公司接到一个用C#+DirecX的项目,从那时起便开始学习Mangaged DirectX ,现将在开发过程中的一点总结发表出来,和同行们共同参考,共同学习,共同进步,前面是一些基础内容,算是入门篇吧,现在正将开发过程中所用到的一些算法整理中,算是中级篇吧。1:在整理过程中,有些内容为从网上找的资料,部分为翻译国外文章,正所

dandanCool的专栏 8816

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

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

深入Managed DirectX9

<br />作者 <br /> <br />calyman    clayman_joe@yahoo.com.cn   (超级好的翻译。建议初学者仔细看)<br /><br />文章来源 >> http://www.cnblogs.com/dagon007/archive/2005/05/06/149916.html<br /><br />:【翻译】深入Managed DirectX9(一)<br /><br /> <br /> <br />Device类是DirectX里的所有绘图操作所必须的。可以把这个

优秀技术文章收录 5941

假人有限元模型

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

翻译 managed DirectX9(第一章)

第一章 Introducing Direct 3D翻译:clayman创建设备  Device类是DirectX里的所有绘图操作所必须的。可以把这个类假想为真实的图形卡。场景里所有其他图形对象都依赖于device。你的计算机里可以有一个到几个device,在Mnaged DirctX3D里,你可以控制任意多个device。         Device共有三个构造函数,我们现在只讨论其中的一个,但

Clayman的专栏 9801

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

managed DirectX9(第二章)

 选择正确的Device翻译:clayman        The number of possible permutations when cretion a device is quite staggering. 如今,市场里有大量不同类型的显示卡,记住每种显卡所支持的特性几乎时不可能的。你应该询问device,让它告诉你它所支持的特性。我们接下来将讨论:                  

sunkangta的专栏 1412

关于Managed DirectX kick start的源码

                  这本书是我很早以前就翻译的了,现在源码光盘 并不在身边。现在需要源码的同志可以到zbuffer去下载,至于其中的资源文件,除第六章的以外,大部分都可以在DirectX SDK里找到。另外,你也可以到gameres上去搜索我原来发帖子,标题是《深入Managed DirectX9》,每一章后面都带了完整代码和资源。            其实个人觉得既然X

Clayman的专栏 3833

【翻译】Managed DirectX(第九章)

第九章 使用其它Mesh类型翻译:claymanclayman_joe@yahoo.com.cn仅供个人学习之用,勿用于任何商业用途,转载请注明作者^_^简化Mesh(Simplifying Meshes)         我们花了大量的时间来学习扩展库中的基本Mesh类,但实际上,还有3种其它Mesh类型我们没有讨论过,在这一章中,我们就来看看这几个对象。         我们已经知道如何通过使

Clayman的专栏 3572

Managed Directx 9 kick start,第五章 纹理

Rendering with Meshes 我们又向前迈进了一大步,这可比总看着立方体旋转要有趣多了。下一章我们将使用Managed DirectX来写一个真正的游戏了,最然它可能看起来很简单,但毕竟是我们的第一个三维游戏^_^,第六章内容比较,大概3、4次才能翻译完^_^。  定义Mesh    虽然有很多时候,你需要手动创建顶

bbwolfcool的专栏 1181

深入Managed DirectX9(转)作者calyman(超级好的翻译。建议初学者仔细看)

作者 calymanclayman_joe@yahoo.com.cn:【翻译】深入Managed DirectX9(一) Device类是DirectX里的所有绘图操作所必须的。可以把这个类假想为真实的图形卡。场景里所有其他图形对象都依赖于device。你的计算机里可以有一个到几个device,在MnagedDirctX3D里,你可以控制任意多个device。Devic...

weixin_30338461的博客 444

关于Vs2010 C#使用DirectX的问题

转载的,就不翻译了…微软把精力放到xna去了。所以推荐大家用XNA,如果非要用托管的DirectX也可以,只不过版本一直是2006年的了。 具体方法: 安装SDK之后 他默认的位置在 C:\WINDOWS\Microsoft.NET\Managed DirectX 把里

leestar54的专栏 1万+

Rendering terrains with Managed DirectX翻译

《翻译》 原文链接:http://www.codeproject.com/Articles/8195/Rendering-terrains-with-Managed-DirectX (忽然发现自己翻译的自己都不知道说的什么。。。也罢,一个小时的产物,不要要求太高) (丫的,翻译完也不不知道怎么实现的,还是老老实实去看代码吧,话说我还没用过c#,容我编程c++的,龙书第13章不就讲的地...

weixin_30301183的博客 121

【翻译】Managed DirectX(第十一章)

第十一章 可编程渲染管道以及高级着色语言入门翻译:claymanclayman_joe@yahoo.com.cn仅供个人学习之用,勿用于任何商业用途,转载请注明作者^_^至今为止,我们都在使用固定功能的管道(fixed-function pipeline)进行渲染。回到那段古老的日子(DirectX 8.0之前),这是唯一渲染物体的方法。固定功能的渲染管道本质上就是一系列用来控制如何渲染特定类型数

Clayman的专栏 4205

(转)Managed DirectX +C# 开发(入门篇)(一)

<br />前      言       以前是用VC 作计算机图形学的,大约在一年前,公司接到一个用C#+DirecX的项目,从那时起便开始学习Mangaged DirectX ,现将在开发过程中的一点总结发表出来,和同行们共同参考,共同学习,共同进步,前面是一些基础内容,算是入门篇吧,现在正将开发过程中所用到的一些算法整理中,算是中级篇吧。1:在整理过程中,有些内容为从网上找的资料,部分为翻译国外文章,正所谓“天下文章一大抄,就看会抄不会抄。”,如果侵犯了你的个人权益,可同我联系;2:以前的开发环境为V

优秀技术文章收录 2190
上一篇: 翻译 managed DirectX9(第一章)
下一篇: 【翻译】managed DirectX (第三章)
soilwork
博客等级 码龄23年 290粉丝 116原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值