说说本人学习DirectX之路

笔者一直对做游戏颇有兴趣,一直在尝试学习一套可以做游戏的工具链,之前的选择是 DirectX + Cpp + VS2012 + 3dmax,声音暂且没有涉及。

那么选择 DirectX 的原因是觉得微软实力摆在那儿,而且更新的也比较多,尤其是 DX9 到 DX11,看得到还是有较多的提升的,而且可以看到近几年的游戏质量,但从画面来讲,真心不错。用 DXUT 的目的也就是说能减少工作量,尽快的投入到游戏最核心的部分,而不是一直停留在画面的方面。然而 DirectX / DXUT 用起来并没有想象中那么方便:

  1. 在 DX9 到 DX11 以后,在示例中, Mesh 的导入(.X文件)常常还是使用 DX9 进行的(笔者使用的 SDK 版本为 2010.2 版本),绘制的时候支持 DX9 / DX11 那么,你需要不停的去查看 DX9 和 DX11 的对应部分,还需要区分和维护两个部分的代码,使得整个学习和实践的过程很慢,而且经常把两个部分搞混
  2. DX9到DX10/DX11变化相当的大,不光是架构来看,从代码也可以看出处理流程,DX10麻烦不少(当然,你熟悉以后可以自己写些东西把这个简化掉)
  3. DX11 的 Mesh 不支持 .X文件,而采用 .sdkmesh 文件,虽然 DXUT 中提供了很方便的导入 API,但是 SDK 中提供的 MeshConvert.exe 工具并不能将我从 3dmax 中导出的 .obj 文件正常转换为 .sdkmesh,何况 .obj根本不支持动画
  4. 我一度去了解了一下 .fbx 文件的解析(因为最终希望导入动画,所以 .obj 是不够的),结果,又碰上了 .fbx 文件曾经支持的接口现在不开放了,所以自己解析的路子也没了
  5. 那么我退而求其次,使用低版本的 DX9 + .X 文件导入,结果发现采用 HLSL 的方式来实现动画时,需要在 Shader 中添加动画部分的代码,这就与我一些对于游戏的整体实现的理解有一些冲突,想要直接从程序里完成动画的操作,可能还需要一些 Shader的辅助,无疑又是给我提高了一个难度
所以,在最终的纠结和权衡中,我做了退步,考虑先使用 Unity 引擎来完成一些小的 Demo,希望能够脱离一直在门口晃悠的现状。
最后,留下一点我学习 DXUT 的经验吧:
  1. 首先你得熟悉一下 DirectX 基础,了解一些 DirectX 的工作流程,大概知道 DXUT 空项目中各个接口函数是干什么的,什么时候调用,对后面添加自己的代码还是很有帮助的。
  2. 然后,就是要多多学习 SDK 中的例程,不要贪多,一步一步来,每次查看的工程比上次的工程多一点操作(比如上次是绘制Mesh,这次是绘制Mesh加上灯光),那么你就能明确的知道新的操作需要加入的代码有哪些,怎样写,它有什么作用。
  3. 另外,建议不要仅仅限制于例程。建议看每个例程的时候,自己写一个类似的程序(对你没看错,是“类似的”),因为当你做了改变,你就能更加的明确某一个操作或者某一个 API 起到什么作用,我们改变它能得到什么,那么在以后进行设计实现时,你就能物尽其用了。

经验不多,还望大家自己拿捏参考。不过,如果你的项目人数足够的话,我还是希望有人能去钻研下底层的东西,看看国外的游戏引擎的发展,真是觉得国内还得加把劲。

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值