译者序

JavaScript的野心越来越大了。在过去的十年中,这项技术逐渐把报纸一般的网页变成了能与客户端程序相媲美的Web应用。在接管了用户界面、网络通信、多媒体、甚至数据存储这些原本由桌面程序负责的功能后,JavaScript终于把触手伸向了最为复杂的领域之一——三维图形渲染。WebGL因此而诞生。

学习WebGL,仅有JavaScript功底是不够的,因为WebGL的API非常低级,如果不对图形学中的诸多概念比较了解,是没办法熟练操作这些API,并知道“你究竟在做些什么”。互联网上大部分WebGL教程都忽视了这一点,所以我最初在学习WebGL时异常艰辛,经常发生“效果出来了,但不知为什么”的情形。

这本书的好处,就是它系统详细地讲述了着色器、渲染管线、模型变换、投影矩阵这些三维图形学的基本概念,对于没有图形学基础的前端大众实在是太适合了。这本书不厌其烦地讲述了几乎每一个API函数(甚至每一个参数)的作用,手把手地教你如何编写着色器,涉及了无数与WebGL相关的细节。这本书相当基础,它不会让你在很短的时间里就能渲染出精美绝伦的场景(往往借助某些库)。事实上,直到本书篇幅过半,它才会真正地考虑“三维”这件事。但是请相信我,仔细研究书中前半部分的基础知识,会使你受益匪浅。但这本书也并不简单,最后一章“高级技术”会让你大开眼界。你会从原理上理解,如何使模型在地面上投下阴影,如何绘制半透明的物体,如何在场景中制造雾化效果,如何将渲染的结果作为纹理使用等等。也许你已经知道如何做,但这本书却告诉了你,为什么要这样做。

总之,如果你是一个缺乏图形编程经验的Web开发者,这是一本深入浅出,不可多得的案头好书。风雨欲来,如果现在还不开始进行技术储备,更待何时呢?

最后,我要感谢电子工业出版社的任晓露编辑,是她让我在第一时间读到了如此精彩的作品。水平所限,纰漏在所难免,如果要提交本书的勘误,或者对本书有任何想法或建议,可以在本书的主页上留言(http://xieguanglei.com/post/about-webgl-programmingguide.html)。

谢光磊

2014年4月