从开始折腾到觉得自己可以小结一下了,一共三周。
开始是找库,OPENGL还是DirectX其实并不重要,甚至还考虑过Unity,不过最终发现像我这种非主流的需求,还是老老实实的从头学(搞)比较实际。
最终选了DirectX还是因为微软的文档。
SharpDX封装的很好,学习的过程中找到的有效资料基本都是C++的,用SharpDX实现既能对应上,又让我觉得方便了很多(和C++例子比)。
代码我是在一个项目上直接改的,我的目的不是教别人,所以堆在一起,未来看的时候能回忆一下当初的理解过程。
如果其他人看到了,抱歉,这文章是我自己纪录思路的,可能不太适合当作参考。
总的来说,DirectX入门需要一些数学知识储备,向量、矩阵的定义和运算,坐标变换的原理,齐次坐标变换,仿射矩阵,向量单位化(L2Norm),有一些立体的抽象思维能力,坐标系,光源,摄像机,而且绕不开的还有C++的知识,至少要能猜懂。
学习的顺序:
一、找本靠谱的参考书,例如Introduction to 3D Game Programming with Direct3D 11.0
二、测试开发环境,创建一个Device,我在网上找到几个靠谱的Tutorial代码却全在我Win7+VS2015 Community的环境下编译不能。所以测试环境很重要啊。
三、理解PipeLine,细节理解得越清楚越好,否则后面绝对会乱,尤其是C++。
四、针对PipeLine的每一部分,去用代码熟悉一下,总的来说,Directx每一步都有如下套路:描述一下这部分的属性,分配内存(当然分配前要定义结构和空间大小),绑定。C++原始API都是把创建的结果地址当作参数传入,返回结果是出错代码,对习惯了等号右赋左值的C#程序员很不习惯,所以SharpDX封装的好!而且还尽力省略了一些很不常用的参数。
五、别着急,这种底层的API由于灵活,所以每个人的玩法都不一样,没理解的情况下要把两个例子混一块玩会死得很惨,