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不是,它就是光,各种类型的光。