Answers:
这取决于您是否要设计引擎来制作要在三年,一年或六个月内完成的游戏,以及是否要考虑控制台端口。从Direct3D9中丢弃游戏的360端口相对容易,但是您需要做更多的工作,这些源自D3D11。请记住,D3D11会锁定所有XP用户,即使不一定是所有D3D9硬件。
最新的Steam调查表明,约有16%的人仍在使用Windows XP。你能承受得住吗?到游戏完成时,情况将如何改变?您是否要使用依赖于更高级别API的功能?这些是您需要回答自己的问题。
Direct3D 9非常易于访问,您可以通过D3D9游戏接触到很多人,但是现在已经很多了,尤其是在PC上。如果您不希望针对那些人,那么就没有什么意义了。
哦,不要理会DX10。完全没有理由在DX11上使用它。除非您想使用D2D / DirectWrite,否则这并非不合理。
当然,值得一提的是,在DX11中,没有什么替代类的,作为业余爱好者,我在DX9中发现了非常有用的类。例如ID3DXMesh,ID3DXSprite,ID3DXFont,必须从源代码编译ID3DXEffect等。Microsoft建议使用DirectWrite代替ID3DXFont,但是,他们当然忘记了使DX11与新的Direct2D / DirectWrite系统兼容,在我看来这是愚蠢的。 。
tldr:学习D3D11。
就API的形状而言,10和11之间的差异很小。D3D11允许您使用降级功能来针对D3D11 API编写代码,该API会一直运行到D3D9类硬件(请注意,您仍然需要Vista或更高版本)。因此,您最好还是学习较新的API,无论如何我觉得它更干净,更统一。
但是,如果您没有Vista或更高版本,或者最终希望自己的代码在XP上运行(例如,将游戏分发给XP用户),则必须使用D3D9。XP市场可能正在萎缩,所以我想说11。
如果您完全不熟悉3D编程,尤其是如果您不熟悉COM和Windows编程,那么我强烈建议您不要学习DirectX。以我的经验,DirectX是一个非常强大的工具,但是它具有非常陡峭的学习曲线,除了Windows编程,3D编程和许多其他学习曲线之外,您还必须考虑它。如果您从DirectX开始,那么制作样板代码的所有细节可能会让您不知所措,因此我建议您不要这样做。
相反,我建议使用一个更简单的API,该API可让您更加专注于学习3D编程。XNA非常好,而且由于它位于DirectX之上,一旦您转向DirectX,您将拥有一些想法,这些想法将使DirectX学习曲线更容易掌握。
现在,如果您具有3D编程(例如OpenGL)的经验,并且知道如何进行COM编程,那么我建议您使用DirectX11。除了最新版本以外,其他任何东西都将被淘汰,您从中获得的任何经验将对时间较短。
但是话又说回来,真正的经验来自多种多样,所以我建议您同时学习DirectX和OpenGL,并根据需要学习XNA,并学习尽可能多的API。这样,您将具有3D编程如何与不同工具一起使用的抽象知识,并且将能够为每个工作使用正确的工具。
我推荐DX11或DX10。差别很小。您可以使用DX11做更多的事情(硬件消息传递,更好的gpgpu,输出到像素着色器上的多个纹理..)。DirectX 9具有另一种体系结构,目前几乎已经过时。如果您正在询问当前的游戏开发者行业:DX9已死于当前开发的PC游戏。
但是我不得不说:
不要在意api,一旦您真正了解了图形的工作原理,学习新的api最多需要一个月的时间。时间更短。