我希望通过做项目来让我的简历更加吸引游戏公司。因此,我打算开始购买相关书籍。但我不知道应该先阅读DirectX 9还是10的API书籍。尽管DirectX10很好,但似乎行业转型到10上的速度比较缓慢。所以我应该使用9还是选择10呢?
我希望通过做项目来让我的简历更加吸引游戏公司。因此,我打算开始购买相关书籍。但我不知道应该先阅读DirectX 9还是10的API书籍。尽管DirectX10很好,但似乎行业转型到10上的速度比较缓慢。所以我应该使用9还是选择10呢?
我建议先学习DirectX9的基础知识,然后迅速转向DX11。与DirectX9相比,DirectX11更难入门,因为它略微更加复杂,同时D3DX中的许多实用函数已经不存在,或者已经被移动到源代码(例如效果框架)中。这并不是坏事,但它使得学习变得更加复杂,因为你必须一次性学习更多东西。
花2到3周的时间学习DX9,然后转向DX11进行“真正”的工作:P
使用固定管线和d3dx学习基本的DX9知识等,加载模型等。相比DX11,它要简单得多,并且文档也更好,你将可以更快地在屏幕上获得一个三角形和一个模型。直到你完全理解基本的概念和变换。
但接下来用着色器重写所有内容。无论如何,你都需要在DX10/11中使用它们,但是当你已经有一个可工作的代码框架时,学习会更容易,并且在DX9中让它工作也更加简单。
学习完基本的3D和编程着色器知识之后,就可以开始学习DX11。你将不得不切换数学库。你将不得不发明自己的模型格式和加载程序。你将不得不发明自己的效果框架或使用示例框架,但是现在它们都更容易了,因为你已经掌握了基础知识。
针对OneOfOne的评论,如果您知道如何在GL、D3D9、D3D10或D3D11中进行3D开发,则可以通过一点点努力将这些技能转移到其他任何技术上。
个人建议学习D3D11,因为这是最前沿的技术。您会发现只需要稍微努力就能够掌握GL、D3D9或D3D10。如果足够努力地学习理论知识,您甚至会发现将这些技能转移到完全软件引擎上也并不难。
事实是,你需要学习两者。
只要仍有50%的玩家使用WinXP, 你就需要能够编写Direct3D9程序。
D3D9 并不比D3D10/11更容易入门。它们有相同的原理,需要放置顶点、计算法线和渲染网格。无论你是创建ID3D11BlendState
结构还是调用IDirect3DDevice9::SetRenderState()
,都是相同的概念,只是不同的实现方式。
IA*
fcns: 输入装配阶段,OM*
fcns: 输出合并阶段等))。这可能会导致稍微大一点的初始启动曲线,但一旦掌握,它不比D3D9难,并且更好,因为函数的命名有助于概念的理解。除了一些小例外,DX10基本上就是一个没有遗留问题的DX9。例如,DX9具有内置选项,用于渲染Flatshaded、Textured或使用Shader。在DX10中,这些选项已经消失了,您必须始终使用真正的着色器。如果您想进行平面着色,请编写一个执行平面着色的HLSL着色器。
因此,我建议您学习DX10(或DX11)。您将能够快速适应DX9,但通过不使用遗留函数采用更现代的编码风格。它们可能会让人感到困惑,因此DX10将使您专注于相关事项。
如果您是真正的初学者,并且设置顶点缓冲区以创建单个三角形令您感到困惑(作为真正的3D程序员,您对单个三角形不再感兴趣),我甚至建议您从OpenGL开始。您将获得更快的成功,但实际上,如果您想专注于现代3D编程,则这可能会有点分散注意力,就像DX9遗留问题一样。
没错,不要浪费时间在DX10上,它从来没有成为行业标准,也没有足够大的变化来促使人们从DX9升级,但对于DX11来说是有的。
我建议使用DirectX 11,因为在我看来,浪费时间在已弃用的函数或技术上是没有意义的。 从头开始学习着色器将使事情更加清晰。
尝试运行9和10版本的示例文件夹中的样本,如果你的电脑支持的话,再试试11版本。这就是我正在做的。