CG0 - 写在前面的话

01 Jul 2015

这几篇总结早就该写,然而现在写却又有了不一样的感受。

我即将工作满一年,这一年中各个阶段经历颇多,成长也不少。

从转变身份融入职场,到认识现状和重新定位,最后心态归零开始努力。

我与图形学从此有了交集。

1、关于感谢

很感谢知乎这样的社区。诚然,它有很多的不完善与不友善,这并不妨碍它确确实实地将许多人的知识和经验组织在一起。推荐你接触知乎,也推荐你用甄别的眼光去看。每个人的回答出发点不一样,从不同回答的切面结合自己的经验去理解一件事物的全貌,可以得到不同的感受。

仅就 Computer Graphics(计算机图形学,后文简称 CG)方面而言,我也非常感谢 vczhmiloyip。 我从他们在知乎的回答和专栏的文章都学到了不少知识,这里附上他们的博客与专栏:

vczh - blog1 blog2 专栏

miloyip - blog1 blog2 专栏

2、关于为什么

喜欢。在几十年前,人们很难想象,在一个不足半米的黑盒子里,可以存储数以亿万计的数据,关联到人们的衣食住行。在信息化的社会中,如果想要“撬动地球”,以计算机为基点,代码就是手中的杠杆。这种虚拟而又现实的存在,赋予了人们像魔法师一样的能力,着实很吸引人。

充满想象力。编程是人机交互的桥梁,而人与人交流的桥梁,是眼鼻口耳。我若想要告诉你,我心中所想,脑中所梦,或许直观地让你看一看也是一个好的方法。

回顾总结。我的水平还远不到图形学入门的标准,那么这几篇东西记录的,也很可能是错误的经验。但对我自己而言,“错”是一个过程,也是我很喜欢的“野路子”。凭一些基本的概念和想象,先产生原型,然后在不断的学习中,推倒重做与打磨优化。这也许是我能还原技术探索历史的最好方法了。

把我“错”的经验分享出来,或许也能于大家警醒之用。:p

3、关于博文

1)博文记录了我在学习《3D 游戏编程大师技巧》(以下简称《大师技巧》)过程中,制作软件渲染器的一些思路。

若你读过、正在读这本书,那么你看博文时会在感觉叙述顺序、文件组织方式大同小异。但讲述代码细节时,又会有很大程度的不一样。主要原因在于:

使用了 C++ 来实现软件渲染,在数据封装与函数实现上大量使用了运算符重载;剔除了游戏引擎框架部分内容,专注于渲染器部分的实现;在实现细节上,参考当代的系统环境,做了不同的取舍;没有完全优化,很多地方选择比较原始的实现方式。

这几篇博文并不是《大师技巧》的读书笔记,更多着墨于“学习-对比-思考-选择-实现”这个过程。

2)基于 Windows 平台,工具为 Visual Studio Community 2013。

这里仅是说明代码的环境,平台、工具不是重点,有许多替代方案。

3)基于 C++ 与 Windows GDI 实现。

语言和图形接口也不是重点。我开始着手制作软件渲染器时,学习 C++ 时间不算太长,选择 C++ 旨在练习,所以也并没用到 C++ 特别多的语言特性。《大师技巧》中图形接口基于 Direct3D 旧版本,没必要为了学习而去强行“一致”。书中也只用了很少的篇幅讲述图形接口,当图形接口封装好后,只需要专注渲染实现即可。阿基米德有“杠杆说”,在图形学中也有“渲染说”:

给我一段显存,我可以绘出整个世界。

针对于 C++ 与 Windows GDI,推荐两本入门书:《C++ Primer 5th》、《Windows 程序设计(第五版)》。

4)博文规划如下:

© 2015 plinx