threejs学习第一课:了解threejs的基本概念

threejs是什么?

threejs是一个封装了webgl的js库,通过使用threejs,我们可以快速的构建3D应用。

从web开始到3D开发,平面思维到立体思维的转换

threejs应用结构图

作为一个h5页面开发,在学习threejs 3D开发时,我觉得遇到的第一个问题是思维的转变。上面是一张threejs应用结构图,接下来跟着这张图,一起去探索平面开发和3D开发在思维及其它方面的异同点。

  • 首先渲染器Renderer,它就像一个动态变化的剧院,能够根据导演和演员的需要,为不同的演出提供支持。产品经理的奇妙想法,设计师的脑洞大开UI,通过程序员的手,都能在Renderer中展现出来。从图中可以看到,RendererSceneCamera组成,Scene被完全包裹其中,Camera只有一半在里面,为什么会这样呢?我们带着疑问继续往后看。

  • Camera只有一半包含在Renderer中,如果不去想这个单词的英文含义,你会觉得它在剧院中属于那一部分呢?我认为他更像一个观众,虽身处剧院之中,却不干预剧情的发展。实际上,Camera也确实是这样的一个角色,它决定了我们能看到什么,用什么方式去看,在什么位置去看。Camera既可以在Renderer中,和其它要素打成一团,也可以脱离Renderer区域,进行远观,就像一个观众,如果允许,可以到台上去看戏,也可以坐在剧院最后一排看戏。

  • 在图上我们能看到,Scene是完全在Renderer区域中的,这个就像演员,正常来讲你是不可下舞台的。Scene本义就是场景的意思,为了好理解,暂时可以把它当作一个静态的舞台布置,上面可能会布置桌椅板凳灯光等道具。回到threejs中,就是MeshLight,Group等。这里对这些布置有个概念就行,重要的是记住Scene就是一个静态的场景。

  • 在图中可以看到树状结构的末尾几乎都是Mesh,而所有的Mesh都是由GeometryMaterial组成的。单纯从英文单词来猜,Mesh除了是网的意思,它的动词形式还有“将什么结合在一起”的意思,Geometry是几何的意思,Material是材料的意思。那么,是不是可以这么想,小明手里的一张设计图纸上画了一个立方体(Geometry),正好脚下有一堆沙子(Material),于是他按照于是他按照图纸将沙子做成了一个(mesh)实实在在的立方体。到了这里,一句话总结就是Mesh是由GeometryMaterial组成的物体;而在树上基于Mesh的其它节点,不过是更复杂的物体,本质和Mesh一样。

  • Geometry和它自身的意思一样,就是代表一些不同的几何体,比如球,树,狗,猫等。

  • Material代表着几何体的材质,不同的材质有不同的属性,比如沙子和铁就是不一样的。当然,除了材料本身的属性,一些立方体的属性也可以认为改变,比如你家房子的墙壁,并不是混凝土的颜色,而是被装修的五花八门,至少也得有层贴纸。可以看到Material的末尾还有一个小尾巴Texture就是用来做这事的。

  • 虽然树状结构中大部分东西是由Mesh演变来的,但是Light不是,它就是光,各种类型的光。