Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于初学者,DirectX 9或DirectX 10?_Directx - Fatal编程技术网

对于初学者,DirectX 9或DirectX 10?

对于初学者,DirectX 9或DirectX 10?,directx,Directx,我想做一些项目,使我的简历对游戏公司更有吸引力。所以我要开始买书了。但我不知道应该从阅读DirectX 9或10 api书籍开始。DirectX10非常棒,但行业似乎正在慢慢发展到10。因此,我应该使用9还是使用10???TBH进一步说明一个人的意见如果你知道如何在GL、D3D9、D3D10或D3D11中进行3D开发,那么你可以通过一点工作将这些技能转移到其他任何人身上 就个人而言,我的目标是D3D11,因为这样你就可以学习最前沿的技术。您会发现,只需做一点工作,就可以完成GL、D3D9或D3D

我想做一些项目,使我的简历对游戏公司更有吸引力。所以我要开始买书了。但我不知道应该从阅读DirectX 9或10 api书籍开始。DirectX10非常棒,但行业似乎正在慢慢发展到10。因此,我应该使用9还是使用10???

TBH进一步说明一个人的意见如果你知道如何在GL、D3D9、D3D10或D3D11中进行3D开发,那么你可以通过一点工作将这些技能转移到其他任何人身上


就个人而言,我的目标是D3D11,因为这样你就可以学习最前沿的技术。您会发现,只需做一点工作,就可以完成GL、D3D9或D3D10。在理论上做足够的工作,你会发现将技能转移到一个完全的软件引擎上并不难

我建议使用directx9学习基础知识,然后快速转到dx11。DirectX11比DirectX9更难入门,因为它稍微复杂一些,但D3DX中的许多实用程序函数也不再存在,或者已经转移到源代码中,如effects framework。这不是坏事,但它确实使学习变得更加复杂,因为你必须一次学习更多的东西

花2到3周时间学习DX9,然后转到DX11进行“真正的”工作:p

学习使用固定管道和d3dx加载模型等的基本DX9。它比DX11简单得多,文档记录得也更好,你会更快地在屏幕上看到一个三角形和一个模型。玩这个游戏,直到你完全理解基本概念和转换

但随后仅使用着色器重写所有内容。不管怎样,您都需要在DX10/11中使用它们,但是当您已经有了一个工作的代码框架时,学习起来要容易得多,而且在DX9中工作要简单得多


一旦你有工作,学习DX11。你必须切换数学库。您必须发明自己的模型格式和加载程序。您必须发明自己的效果框架或使用示例框架,但现在您已经了解了3d和编程着色器的基础知识,因此它们都变得容易多了。

如果您真的想学习游戏行业中使用的技能,请坚持使用DirectX 9。由于DirectX 10和11都需要Vista或Windows7,游戏开发人员仍然大多忽略了它们,并将DirectX 9作为目标,以获得对WindowsXP的支持


话虽如此,从哪一个开始并不重要。差别并没有那么大。如果您了解3D API背后的概念以及GPU管道是如何工作的,您可以用最小的努力学习这三种API中的任何一种,甚至是OpenGL。

事实上,您需要同时学习这两种API

,您需要能够在Direct3D9中编程

D3D9并不比D3D10/11更容易入门。其原理相同,顶点要放置,法线要计算,网格要渲染。无论您是创建一个
ID3D11BlendState
结构还是调用
IDirect3DDevice9::SetRenderState()
,都是相同的概念,只是方法不同而已

在使用d3d11几天后,我开始认为它在很多方面都比DX9好。首先,您可以使用GPU的完整封盖,包括几何体着色器。第二,它迫使您完全理解图形管道,甚至可以绘制任何东西(注意函数是如何根据它们影响的管道阶段命名的::(
IA*
fcns:input assembler阶段,
OM*
fcns:output merge阶段等))。这可能会导致初始启动曲线稍大,但一旦得到它,它就不会比D3D9更难,而且更好,因为函数的命名有助于概念的坚持


因此,继续这两种方法,同时学习它们可能有助于减少您从DX9学习不推荐的API/方法的工作量(即您确实希望花更多时间使用着色器,并且不要过多地使用DX9的固定函数管道部分)

你可以在Luna的书中查找DX9/DX11(我建议你从11开始)。你可以去看看,但他没有解释一切,所以你可以在Luna的书中看看这些函数或属性有什么不同

除了一些小的例外,DX10只是一个传统的免费DX9。例如,DX9具有用于渲染平面着色、纹理或使用着色器的内置选项。在DX10中,这些选项已消失,您始终必须使用真实着色器。如果要执行平面着色,请编写一个执行平面着色的HLSL着色器

因此,我建议您学习DX10(或DX11)。您将能够采用fast到DX9,但不使用遗留函数,因此编码风格更为现代。它们可能会非常混乱,因此DX10会将您的注意力集中在相关的事情上


如果你是一个真正的初学者,设置顶点缓冲区来创建单个三角形会让你感到困惑(作为真正的3D程序员,你对单个三角形不再感兴趣),我甚至建议你从OpenGL开始。您将获得更快的成功,但实际上,如果您想专注于现代3D编码,这可能会有点分散DX9传统的注意力。

是的,不要浪费时间使用DX10,因为它在任何时期都没有真正被采用为行业标准,没有任何足够大的变化来保证人们从DX9升级,但对于DX11来说确实如此。

我建议使用directx 11,我认为没有理由在不推荐的功能或技术上浪费时间。
从一开始就学习着色器将使事情变得更加清晰

尝试从9和10的示例文件夹中执行示例,如果您的计算机能够支持,11。这就是我正在做的。

在简历上匹配正确版本的DirectX只对入门级代码猴子来说很重要。TBH我开始做PS2开发,因为我写的DX7/8引擎很好。我的TD给我留下了深刻的印象,在接下来的几年里,我和一位同事写了一篇文章,可以说是