岛马游戏编程之路(一)

  距离第一排博客已经过去两周了,时间过得好快,看着我那第一篇博客连首行缩进都不会[捂脸],现在的感觉莫名复杂。对于我这种学习并不是多么上进的普通大学生来说,这两周学的东西不多,但感觉还是有点收货。首先是把unity下下来玩了玩,界面熟悉了一下,还用书中自带的素材做了几个小例子。但感觉也就是玩玩了,照着书上的步骤走还行,随便拿一个模块儿比如渲染,里面一堆参数没有个几天是搞不透的,更别提怎么用了。不过我最初的打算就是熟悉一下,起码对什么世界坐标系、局部坐标系、摄像机、灯光、组件、渲染、动画有个大体的印象,下一步再找几个案例试一下。
  unity玩了一会儿,就开始从头补3D数学了,后面怎么样不敢说,最近是看到矩阵变换这一块儿了,感觉就我这烂数学也是能看过来的。这两周最大的收货应该就是知道3D世界的平移旋转由矩阵操作的方法了(貌似这就是仿射变换?),然后用C++自己封装实现了一下向量类和矩阵类,还有其它如平面类、直线类、四元数类(只知道了一堆公式,并不知道原理)。
  这里一定要提一下。。。我的C++果然辣鸡到没边,也就primer看了七章,面向对象就懂个继承封装多态的概念。然后封装向量类时直接被重载一堆运算符打败了。。。不过感觉这样学习甚是有效,哪里代码看不懂了立马去查primer相关的章节,然后就把重载运算符那章看了,就一句:

inline EVector3D& operator =(const EVector3D& right)

就包含了好几个知识点,虽然不敢说都掌握了,但起码了解的更有印象了,果然光纸上谈兵不行(虽然纸也没看几张)。
  在两天前又搞到一本书,叫《手把手教你架构3D游戏引擎》,抱着很大的热情敲了两天后,发现到了“视景体”那块儿以后我就GG了,因为并不知道摄像机坐标系那块儿什么近裁剪面远裁剪面什么的知识,参考了网上的一些意见,准备近期看看《windows游戏编程大师技巧》,先一步一步走过来再说。虽然在这里卡住了,但起码这本书的前两章还是能给我一种入门的感觉的,比如讲了一些固定流水线的东西,虽然都是概念,但貌似应该是这样的:

  1. 美工整出来个游戏模型(比如是个人),它自己有个坐标系,就是局部坐标系
  2. 之后肯定要把这个模型放进你的游戏世界里,它就需要用矩阵乘法做两个蜜汁转换,先旋转局部坐标轴变成惯性坐标系,然后再平移就可以转换到世界坐标系了。当时我还在纠结这是SB吗?直接用世界坐标系表示不好吗?结果发现比如你想让它抡胳膊,在它自己的局部坐标系里看就是相对于一个轴在旋转,但直接在世界坐标系里看就复杂了,更何况又抡胳膊又抡腿的情况。
  3. 玩了玩unity就会发现,初始化的游戏世界里会自动放一个虚拟摄像机,它拍到的画面就是最终游戏显示的画面,所以下面就是要把模型从世界坐标系转换到以相机为原点的相机坐标系里(比如吃鸡时,你看见一个人在远处山坡上猫你还是在你面前拿平底锅拍你都是在摄像机的坐标系里体现的),这操作也是用矩阵蜜汁乘法(虽然我并不知道具体是怎么推出来的。。。还需日后再深入)。
  4. 下面就是要把相机坐标系里的3D世界变换到你各种XX寸显示器的屏幕坐标上了(因为你的屏幕是个2D的),这其中会进行物体剔除(即看不见的部分和背对摄像机的部分都整掉,这样节约资源提高效率)、相机坐标转换到透视坐标(这块儿貌似挺深奥,我也没搞懂,要不然也不会卡在什么“视景体”那里,但应该就是把一个3D世界透视成一个2D平面的过程)、透视坐标转换到屏幕坐标(因为有某Phone,某Phone Plus。。。屏幕大小都是不同的)。
  5. 最后一步就是光栅化了(听名字就感觉很深奥很牛币,对于现在的我来说是肯定不会啦),原理是啥咱不知道还,作用就是让你的屏幕成像吧,最终显示出吃鸡的画面来离不开这步。
      这就是我理解的固定流水线(肯定有很多不对的地方),但看完了以后对游戏引擎也算有点概念了,但上网一查发现貌似早过时了。。。现在都在用可编程流水线,应该就是Shader还是啥的(只知其名,未闻其声),不过也算学了点东西,我后面的计划就是先把3D数学再熟悉熟悉啦,毕竟感觉往后走数学必不可少。
      这两周的感慨就是:学海无涯啊555,前路漫漫啊555,自己就是个辣鸡啊555,但是大四就要找地方实习了,不学不行啊!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值