以前有人跟我说
那时候我还很单纯, 简单理解成了
可多年之后, 我发现事情并非我想的这么简单.
重复的轮子总有人造. 计算机界也没有什么一成不变的东西.
就拿AI这个概念, 早就无法和图灵当时喊出的口号同日而语, 从人脸识别到图像合成, 内容丰富得多.
对于重复的轮子, 如果没有买不起操作系统的托马斯, 很难想象如今的我们会活在怎样的技术垄断之下.
没准会和 <1984> 里描绘的一样.
我没读过
再说 lua, 胶水语言放在今天来讲已经不是知道语法就没事了,
luajit UniLua ulua slua xlua
等各类版本的比较问题中, 更别说 lua 的各种绑定库和其他第三方库. 相信 Python 从业者的选择也是如此丰富.
自由软件都这样, Linux系统也因此这么多版本.
说到 OpenGL, 已经发展到”想不想了解由不得你”的程度.
如今的图形工具/软件/手机APP, 各种五花八门的功能会自动推送到你眼前, 无论是B站录制的demo, 还是某个爆火的换性APP.
我也异常排斥 Unity 的那些入门视频, 点开就是教你认识界面布局. 又某些官方论文, 上来就介绍 Global Illustration 这么高大上的概念.
???
不, 这些我都不要, 也都不重要. 我想知道的是
所以, 我用了一段时间, 把坐标系变换/光照/材质/纹理/模型加载/天空盒/阴影/深度测试/模板测试/帧缓冲 亲手打了一遍.
因为我知道, 我只有把这个重复的轮子造出来才能解答心中所有的疑惑.
我也只要把重复的轮子造出来, U3D/Unreal/QT/图片处理/视频处理 就几乎没有什么秘密可言.
它们不过都是挂在轮子上的旋转木马罢了.
我若有时间或者工作需要, 可以熟悉某个工具的使用, 看看它对图形学的API封装是否足够人性化. 若没有, 那也无所谓了.
至少我不会被那些烂大街的”九块九把你打造成Unity高级工程师”的广告唬住.
读过论文, 敲过代码的我, 再回头看看这些入门视频, 就感觉是热水器推销员, 在耐心给你阅读使用说明书一样乏味.
这也让人不觉惊出一身冷汗, 我们正处在一个处处都讲究 “封装/继承/多态” 的世界.
卡马克在试卷的背后给老师留言: 这些死记硬背的东西都太无聊了, 你为什么不给我个项目做呢? 你说什么我都能给你做出来.
这个试卷不是线性代数就是物理吧.
银装素裹的世界,也同时丢失了真实感
忘了这句话吧, “重复的轮子不要造”, 取而代之的是
lua 就很简单, 所以才这么多人会改造它. 面试的时候也会遇到很多
都是很小的问题, 用一个main函数就可以搞定, 但值得去制定丰富的测试用例, 反复把玩.
特别是垃圾回收机制的话题, 似乎从人们吐槽指针之后出现的各类语言, 不论号称自己是”托管式”, 还是说”虚拟机实现跨平台”, 它的易用性的卖点最终都会落到”垃圾回收”上. 总的离不开两大分类, 引用计数 + 标记清除. 剩下的, 循环引用/内存碎片/分代回收等等, 都是在此基础上的细化罢了.
因为语言不同, 叫法还五花八门. 比如引用计数可以理解成智能指针, 标记清除(trace)有时候被翻译成追踪算法, 标记的过程是通过标记可达对象, 然后反向计算得到垃圾(不可达)对象, 其实就是’排除法’, 有的人会叫它’孤岛算法’. 甚至会有问题讨论’分代回收和增量GC’有什么区别, 感觉就没啥区别, 它俩其实是一回事.
再说CPU的缓存的多核设计, 不就是硬件层面的分布式架构, 你敢信? 皓哥 提到的 缓存更新的一致性问题
不就是游戏中跨服活动(例如跨服团购)的数据同步问题么? 逻辑服gas的数据是从中心服gcc中拉取下来的, 那么用MESI状态模型(修改/独占/共享/无效)似乎就能解决数据同步问题. 但前提是, CPU总线不是TCP链接, 它不是全双工的, 也没有网络延迟. :)
MESI模型
这里说的垃圾回收和分布式芯片, 也都是从简单的东西出发, 会接触的各种概念和特性. 但说真的, 不一定工作中用得到, 去记这些杂名, 或者看了源码就想背下来更是没有意义的事情. 何不化整为零, 落个轻松自在, 若是实际项目中会用到, 到了落实到代码的层面, 再讨论那些连拼写和标点符号都不能错的细节. :)
还有计算机网络和邮递员之间千丝万缕的关系. 我们花了那么多钱学的各种网络协议, 没准都是从80年前的<邮递员从业指南>演化而来的, 你敢信? :)邮递员从业指南>
TCP粘包问题
说了这么多, 其实是因为工作需要, 要搁置 OpenGL 一段时间, 转头去研究 skynet 了.
我手上还有很多图形引擎的书没来得及读, 时间都花在了敲代码/调试上了.
尽管如此, 也没有悔意, 毕竟搞懂代码要比搞懂书/读完书重要得多.
我大概还有两三个特别想自己敲出来的原理和相关算法, 留到以后有机会再看吧
- 碰撞检测
- 动画
- 全景图/VR 成像
然后能确定的一个方向是 id-software 的代码应该含金量很高, 没读过至少看几篇翻译来的研究论文也好.
最后附上一句话
多在生活中发现一些”教诲”中暗藏的玄机, 更新自己的人生坐标.
怀恋上世纪八九十年代的编程氛围.
怀念那些自称为Wizard的程序员们.
怀念讲解自己的代码会闪着光芒的眼神.
为兴趣而活. 希望我的代码, 不全是为了谋生.
Unity中的万向锁
blinnPhong光照+Gamma校正
实例化小行星
嗯, Unity不会死循环
改变fov就像是使用一个可伸缩的望远镜