DirectX Forum FAQ #2 [翻] - 希有阁- 博客园

GameDev.Net DirectX Forum FAQ #2

 

[引言]本文翻译自GameDev.Net论坛上一名名为jhoxley的水友所编写的关于在GameDev.Net的DirectX区里广大水友经常问到的问题。鉴于DX更新速度很快,而此文成书时间比较早了,可能文中有一些地方已经不太适用新的SDK了。但是对于了解DirectX编程的新手(例如我)来说,很多概念上的东西还是阐述的很清楚的,是值得一看的东西。因此在这里将其中的主要部分(主要是D3D)翻译出来,方便查阅。如果您感兴趣,想转载的话,请注明出处,谢谢。

 

 

 

D3D#2 固定管线?可编程管线?

 

  使用Direct3D生成图形的基本方法有两种 -- 传统的"固定管线"(Fixed Function)或者更加灵活的"可编程管线"(Programmable Piplline)。固定管线被认为是一种过时的方法,在对老版本的Direct3D 8的支持上更有效一些。然而在Direct3D 10中,固定管线将不再可用了。

 

  固定管线最显著的特点是矩阵变换和光照。比如说,SetTransform()、SetLight()、LightEnable()SetTextureStageState()函数就只会出现在固定管线中。此外,固定管线会使用FVF("Fiexible Vertex Format")来描述顶点信息。

 

  可编程管线使用了顶点(vertex)、几何(geometry)(Direct3D 10中新增)和象素(pixel)着色器(译者注:由于DX的发展,到DX11发布的时候,又增加了其他的着色器)。这些简洁的小程序可以运行自定义的函数,对输入的数据做处理,从本质上说这意味着编程更加的灵活,同时相比于固定管线,它们能够展示更加复杂的图形效果。可编程管线一般使用SetPixelShader()、SetVertextShader()SetVertexDeclaration()这类函数。

 

  尽管这两种方法各自有一些独特的特点,但是在性能上它们几乎没有什么差别。从开发软件的角度来看,当然不希望因为使用了不同的编程方法而造成性能上的损失。尽管硬件和驱动的实现细节对于大众来说是保密的,但是大家普遍达成共识认为显卡驱动会将API指令转换成GPU特定的"微代码"(micro-code) -- 就是说显卡会完成所有的实际工作而不管到底代码到底是基于固定管线还是可编程管线的。

 

  Direct3D 10已经放弃了固定管线,这也意味着不管是为了兼容现有的程序,还是将来开发,微软都想让开发人员把注意力集中在基于Shader的模式上。考虑到Shader本身的复杂性和目前大量的代码都使用的是基于固定管线模式,要实现上述目标很有点难度的,但是起码我们还有一种有效的方法可以尝试一下。Direct3D 9的[Effects Framework]允许将固定管线和基于Shader技术的代码统一起来,这样宿主程序就无需太多地关注到底我们使用的是哪一种技术了。效果框架这个抽象概念使得我们可以先使用固定管线来实现软件功能,等到将来有需要的时候再用相对应的shaders来替换它们。

 

系列上一篇

郑重声明:资讯 【DirectX Forum FAQ #2 [翻] - 希有阁- 博客园】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——