本文件来自:http://blog.csdn.net/codeboycjy/archive/2009/11/29/4900467.aspx

引言:
      DX10发布已经有一段时间了,网上可以查到很多关于Dx9与10的区别的文章。但是大多数都是从玩家角度考虑的。只是展示一下Dx9和Dx10分别渲染出的图片,并且Dx9所渲染的图片经常会缩水很多,目的就是为了展示出Dx10的强大。给大多数人的理解就是,DX10能做出比Dx9好很多的画面。我并不否认Dx10比Dx9优化了很多,但是随便展示出两张图片进行对比,其实意义也不是特别的大。因为我们不知道帧率的对比。而且虽然很多新的技术在Dx9 里面没有,但是还是有一部分可以用其他方法模拟出来的,只是效率上有所下降。

本文简单介绍了DX10和DX9的一些技术上的区别。从程序员的角度看DX10比DX9优势的地方。适合对于Dx有一定了解的朋友。

正文:
      在Windows 98的年代里,GDI和DirectX是完全独立的两个接口。GDI(Graphical Device Interface)是专门用于二维图形显示的接口,封装了一些基本的功能,效率相对DirectX来说要低一些。而DirectX是专门用于游戏开发领域的,它允许用户通过这个接口直接与硬件交互。但是这两个接口之间的交互是非常受限制的,主要原因就是由于底层的驱动架构:

我们看到,在这个驱动模型里面,底层的硬件驱动都是独立的两部分。直到Windows Vista的发布,微软更新了底层的驱动模型

在这个新的驱动架构下,所有的图形接口都是基于DirectX Runtime的。这就为GDI和DirectX交互提供了可能,这也是Vista能够提供更好的用户界面体验的一个重要原因。DirectX9为了向下兼容,所以不得不做一些妥协的工作。例如当VRAM的占用超出了一定界限的时候,Dx9会发出error,而这并不是因为驱动无法提供更多的VRAM。事实上,底层驱动完全可以提供几乎无限的VRAM,但是为了向下兼容其他比较旧的显卡,因为这些卡在这里面可能会出现问题,所以Dx9还会出现Error。由于这种向下兼容的被迫妥协,不免使得Dx9在Vista下的表现不能完全利用底层的优势。对于Dx熟悉的朋友可能会注意到,在Dx9与Dx10之间,有一版Dx 9Ex。这一个版本的Dx是不能在XP下运行的,因为它更多的利用了新的驱动模型的优势,需要新的驱动模型才可以支持。而XP下的驱动模型还是上面的模型。Dx10是完全建立在新的驱动模型下面的全新的接口,它在Vista下可以完全发挥底层设计的优势。但是也同样需要WDDM的支持,这就是DX10不能在XP下运行的最主要的原因了。

简单从底层介绍了一下Dx9与Dx10的区别(希望了解更深入的朋友,可以查看DX SDK里面的Graphics APIs in Windows那篇文章)。那么下面我来介绍一下从编程接口角度看,DX10为我们带来了一些什么样的变化:

完全的可编程管线:
     在DX10里面,是没有固定管线的。如果程序员想用这个接口渲染图形的话,就必须自己写Shader脚本来实现图元的现实。事实上,在大多数次时代的三维游戏中,几乎很少有单纯的固定管线渲染的图元了。因为Phong模型的表现力毕竟还很有限,只通过diffuse, specular等一些简单的属性描述出的东西很难让人信服。可能唯一大量需要固定管线的部分就是二维图形UI部分了。如果UI不是特别复杂,只是渲染二维图片的话,固定管线的功能也就很方便了。不过实现一个模拟固定管线的Shader脚本也并不是什么麻烦事情,所以即使Dx10没有固定管线,也对程序员来说,也不是什么损失了。

完全的HLSL脚本编写:
     对于早期的可编程管线有了解的朋友,可能会想起来,在Dx8的时候是可以用类汇编语言来编写Shader脚本的。在Dx9可以用两者任意一个来编写Shader了。但是在DX10里面,是不可以用汇编来写shader脚本的。

Shader Model 4.0:
     在Dx10里的Shader是基于Shader Model 4.0的。具体细节我不是很清楚,但是SM 4.0有更多的指令数。如果实现个多光源的效果,可能在SM2.0里面只能做到8个(当然不排除能做更多个),是因为指令数目是有限制的。那么在新的 SM4.0里面,肯定是可以实现更多的光源数目了。当然这只是一个例子而已,而且多光源技术也不是什么先进的东西,很多场景中都被延迟光照所取代了。

没有CAPS:
     在Dx9里面,程序员经常会查询那些功能是被硬件所支持的,哪些是不能的。而在Dx10里面,CAPS的概念就被移除了。一块显卡或者支持DX10的所有特性,或者干脆就不是块DX10显卡。那么意味着程序员可以使用DX10的一切功能而不需要在这之前查询当前硬件是否支持这项功能。

Geometry Shader:
     GS是DX10新推出的一个概念。它是在VS和PS之间的一个GPU Kernel类型,负责接收由VS处理后的顶点,然后可以生成新的顶点,重新做处理。举一个简单的例子,粒子系统,假设有1k个粒子。那么每帧实际需要从 CPU传输到GPU的数据是1K*4,因为每个粒子由四个顶点组成。而这些数据是要走PCIE总线的,这个总线的带宽的效率远远不及GPU On Chip Memory的。如果有了GS,我们完全可以只传输每个粒子的中心,然后GS由粒子中心信息生成新的顶点。那么这样以来,就可以省下四倍的传输。当然这只是一个简单的例子而已,而且即使在DX9上渲染粒子系统,粒子的更新如果用GPU来处理的话,完全可以不传输每个粒子的信息。

Shader脚本开始支持整型数据:
     在DX9里面,实际上Shader中是没有整数的概念的。即使在VS或者PS里面声明一个int,其实硬件通过float的转换来处理的。在DX10里面,是有对于整数的支持的。可以对整数进行位运算等操作,这些都是在硬件上实现的。输入的纹理的数据类型也可以是整型的。

贴两张网上对比Dx9和Dx10的效果图吧,^_^。

  

  

左边的两张是Dx9的右边是Dx10的。

DX10有了这些变化后,可以方便程序员进行开发。但不是说DX10可以做到的东西,DX9就完全做不到,只不过是DX10的效率更高一些。我们看上面的对比图,其实如果做一个fake的光照效果,左下角的图完全可以用DX9模拟出来(个人感觉只是右边加上了点后处理特效而已)。举另一个例子来说,用 DX10做阴影效果,Shadow Volumn可以在GPU端利用GS来生成,然后用Stream-out功能把生成的资源再利用,从而做出这个效果。但是我们也同样在DX9上看到了 Shadow Volumn的Demo。其实效果是差不多的,主要区别在于前者利用了GPU去生成Shadow Volumn,这个任务本身就是一个并行的过程,GPU处理要优于CPU处理。而且渲染是在GPU端进行的,如果利用CPU生成的数据,就必须把数据通过 PCIE传输到显卡上,这些也是很耗时的过程。当然,如果实在要用DX9在GPU端生成Shadow Volumn,还可以通过CUDA,OpenCL等一些通用计算接口来帮助处理。但是这样会给程序很大限制,因为AMD和Nvidia有各自不同的解决方案,如果你用了其中一家的,就很难在另一家的卡上Work(OpenCL除外)。

基本上就介绍这些内容吧,我了解的还很少,很多东西是查资料的。如果有什么错误的地方,欢迎和我交流。^_^

Dx 10 与 Dx 9 的一些技术区别相关推荐

  1. 捷得DX(Joget DX) 下一代开源应用程序开发平台,可实现更快,更简单的数字化转型(DX)

    捷得DX(Joget DX)是下一代开源应用程序开发平台,可实现更快,更简单的数字化转型(DX) 捷得DX(JOGET DX) V7新功能预告 捷得DX 7有哪些新功能? **1.用户体验 (UX) ...

  2. 快10倍效率的3dmax建模技术,这些技巧你不能错过!【上】

    俗话说得好:"工欲善其事必先利其器",配置一个适合自己的工作界面,是可以提高我们的工作效率.让我们做起作品来更加顺手,介绍快10倍效率的3dmax建模技术,这些技巧你不能错过![上 ...

  3. (C语言)写一个用矩形法求定积分的通用函数, 分别求∫sin(x)dx, ∫cos(x)dx ,∫e^xdx

    写一个用矩形法求定积分的通用函数,分别求∫sin(x)dx, ∫cos(x)dx ,∫e^xdx #define _CRT_SECURE_NO_WARNINGS #include<stdio.h ...

  4. WPAN、WLAN、WMAN、WWAN无线通讯技术区别

    WPAN.WLAN.WMAN.WWAN无线通讯技术区别 标签: 杂谈 目前市面上有多种不同的无线通讯技术,分别以频率.频宽.范围.应用方式等要素来加以区分.在这篇白皮书中,我们将一一探讨这些技术.如( ...

  5. 多维度分析高频和超高频RFID技术区别

    高频RFID技术和超高频RFID技术他们都是RFID领域重要的技术应用方向,因为频段的不同,造成了高频与超高频RFID技术应用之前的显著差别.上海岳冉RFID从多维度.多方面为大家分析高频RFID和超 ...

  6. 计算机网络应用和计算机应用有什么区别,什么是计算机网络技术?和计算机应用技术区别...

    什么是计算机网络技术?和计算机应用技术区别时间:2017-12-29 14:50    浏览次数: 发布者:润天教育    来源:金信润天 0 21世纪是网络发展快速发展的时期,在技术上得到了非常大的 ...

  7. 机器学习 深度学习技术区别_体育技术机器学习金钱和灵感的圣杯

    机器学习 深度学习技术区别 I claim that anyone with a math background and a love of baseball has at one time give ...

  8. 高压滑环与低压滑环的技术区别有哪些

    在之前小编撰写的文章当中,我们为广大的读者朋友们详细的介绍了滑环在人们日常的生活和生产过程中起到的巨大作用.我们都知道,在旋转装置的能量和信号传输方面,现如今绝对没有比滑环更加适合的装置,当然电刷也算 ...

  9. 二、三、四、七层交换技术区别

    2019独角兽企业重金招聘Python工程师标准>>> 二.三.四.七层交换技术区别 二层交换技术 二层交换想信大家都已经非常熟悉了,可以简单的解释成以IP与MAC共同确认数据包地址 ...

最新文章

  1. 21HTML5新特性
  2. sqlserver 指数_指数基金的分类有哪些?
  3. C# 读取 Access
  4. 能把汉字转化为拼音的一个函数
  5. 线上风控与数据埋点三部曲(一)——流量江湖不是处女地,投放渠道需谨慎
  6. 荣新广源B班20121207作业
  7. lax文件的编码问题
  8. sublime双击选中$
  9. TTS-零基础入门-10分钟教你做一个语音功能
  10. (附源码)计算机毕业设计java宠物领养饲养交流管理平台
  11. 时间序列分析和预测(含实例及代码)
  12. 阿里巴巴android代码生成器,在线热点代码生成器代码生成工具-1秒钟美工助手官方网站...
  13. [任天堂社长访谈之:Nintendo 3DS内置软件
  14. 数据以及空值数据处理方法
  15. 如何注销/删除MSN帐号(Windows Live ID)
  16. Python解二元一次方程
  17. 世界上最好的拍照手机,华为拍照的四种功能揭晓,拍出你想拍的
  18. 趁着时光正好,好好去爱她
  19. 微服务架构如何进行解耦?
  20. 30、T5L 迪文屏 C51开发之 ADC模数转换

热门文章

  1. python的擅长领域
  2. mini2440的LEDS驱动程序和测试程序详解
  3. 360浏览器极速模式自动_浏览器正在为网站带来自动暗模式
  4. format函数用法详解
  5. 华为服务器安装nas系统,服务器 nas 配置
  6. 华为IT总监徐家骏的10年
  7. 机器学习实战——数据探索之数据泄露(Data Leakage)
  8. TCP/IP协议(2): 以太网(IEEE 802.3) 协议 —— 构成有线局域网的基本协议
  9. 如何使用Photoshop(PS)将图片的底色变为透明
  10. 网络组建大全(包括企业网、校园网、网吧和基础知识)(转)