threejs是什么?
threejs是一个封装了webgl的js库,通过使用threejs
,我们可以快速的构建3D应用。
从web开始到3D开发,平面思维到立体思维的转换
作为一个h5页面开发,在学习threejs 3D开发时,我觉得遇到的第一个问题是思维的转变。上面是一张threejs应用结构图,接下来跟着这张图,一起去探索平面开发和3D开发在思维及其它方面的异同点。
首先渲染器
Renderer
,它就像一个动态变化的剧院,能够根据导演和演员的需要,为不同的演出提供支持。产品经理的奇妙想法,设计师的脑洞大开UI,通过程序员的手,都能在Renderer
中展现出来。从图中可以看到,Renderer
由Scene
和Camera
组成,Scene
被完全包裹其中,Camera
只有一半在里面,为什么会这样呢?我们带着疑问继续往后看。Camera
只有一半包含在Renderer
中,如果不去想这个单词的英文含义,你会觉得它在剧院中属于那一部分呢?我认为他更像一个观众,虽身处剧院之中,却不干预剧情的发展。实际上,Camera
也确实是这样的一个角色,它决定了我们能看到什么,用什么方式去看,在什么位置去看。Camera
既可以在Renderer
中,和其它要素打成一团,也可以脱离Renderer
区域,进行远观,就像一个观众,如果允许,可以到台上去看戏,也可以坐在剧院最后一排看戏。在图上我们能看到,
Scene
是完全在Renderer
区域中的,这个就像演员,正常来讲你是不可下舞台的。Scene
本义就是场景的意思,为了好理解,暂时可以把它当作一个静态的舞台布置,上面可能会布置桌椅板凳灯光等道具。回到threejs
中,就是Mesh
,Light
,Group
等。这里对这些布置有个概念就行,重要的是记住Scene
就是一个静态的场景。在图中可以看到树状结构的末尾几乎都是
Mesh
,而所有的Mesh
都是由Geometry
和Material
组成的。单纯从英文单词来猜,Mesh
除了是网的意思,它的动词形式还有“将什么结合在一起”的意思,Geometry
是几何的意思,Material
是材料的意思。那么,是不是可以这么想,小明手里的一张设计图纸上画了一个立方体(Geometry),正好脚下有一堆沙子(Material),于是他按照于是他按照图纸将沙子做成了一个(mesh)实实在在的立方体。到了这里,一句话总结就是Mesh
是由Geometry
和Material
组成的物体;而在树上基于Mesh
的其它节点,不过是更复杂的物体,本质和Mesh
一样。Geometry
和它自身的意思一样,就是代表一些不同的几何体,比如球,树,狗,猫等。Material
代表着几何体的材质,不同的材质有不同的属性,比如沙子和铁就是不一样的。当然,除了材料本身的属性,一些立方体的属性也可以认为改变,比如你家房子的墙壁,并不是混凝土的颜色,而是被装修的五花八门,至少也得有层贴纸。可以看到Material
的末尾还有一个小尾巴Texture
就是用来做这事的。虽然树状结构中大部分东西是由
Mesh
演变来的,但是Light
不是,它就是光,各种类型的光。