1.3 Three.js引擎
WebGL的原生API是相当低级的,对于大部分传统程序员来说遥不可及,只有有经验的3D程序员才能驾驭。现在已经有很多人在做这些代码库的集成工作,通过编写用户友好的接口程序,使得WebGL编程变得通俗易懂,一些知名的开发框架有GLGE(http://www.glge.org)、SceneJS(http://www.scenejs.org)、CubicVR(http://www.cubicvr.org)、Three.js(http://www.threejs.org)等。在众多的引擎中,Three.js(Ricardo Cabello Miguel,西班牙)成为了佼佼者,它以简单、直观的方式封装了3D图形编程中的常用对象,使用了很多图形引擎的高级技巧,极大地提高了性能,且是完全免费和开源的。其主要特点包括:
(1)掩盖了3D渲染的细节。Three.js将原生API的细节进行了抽象,将3D场景抽象为网格(mesh)、材质(material)、光源(light)、摄像机(camera)等Object3D对象。
(2)内置了很多常用3D几何对象。例如,球体(SphereGeometry)、立方体(Cube-Geometry)、圆柱(CylinderGeometry)、3D文字(TextGeometry)等,并提供了相关API,允许用户自由组合这些3D对象。
(3)支持交互。Three.js提供了在3D场景中的拾取(pick)、拖动(drag)等操作,使得用户可以轻松创建支持交互的应用。
(4)内置了数学库。Three.js内置了3D图形学中的常用矩阵、投影和矢量运算的数学库,使得没有图形学基础的程序员也可轻松进行3D编程。
难能可贵的是,通常情况下更高的封装程度往往意味着灵活性的牺牲,但是Three.js在这方面做得很好,几乎不会有WebGL支持而Three.js实现不了的情况,因此本书主要针对Three.js进行说明。
Mr.doob(https://github.com/mrdoob)是Three.js项目发起人和主要贡献者之一,但由于Three.js是Github(http://github.com/mrdoob/three.js/)上的一个开源项目,因此有非常多的贡献者。
Three.js并没有非常明确的设计目标,目前大量的爱好者正在不断修正不良的设计,添加新的功能,最新的版本(大约每两个月左右更新一次)和所有的旧版本都可以在http://threejs.org/上下载,它是完全免费的。
本书的所有示例是基于Three.js R62版本的,Three.js各版本之间并不能完全兼容,在阅读这些示例时请注意这点。