一、什么是three.js?
学习一门东西,我一直以来的思路就是先要搞清楚,我们为什么需要这项技术,以及它能给我们带来什么,对于three.js我也是如此。
首先Three.js封装了底层的图形接口,让我们能用简单的代码实现三维场景的渲染,本质上可以看做WebGL的上层的封装。
那么什么又是webGL呢?WebGL是基于OpenGL ES 2.0的Web标准,可以通过HTML5 Canvas元素作为DOM接口访问。
简单来说,WebGL其实就是将OpenGL (ES)移植到了网页平台,让我们使用JavaScript就可以在网页上实现三维图形的渲染了。
而之所以我们需要对WebGL进行封装,而不是直接去使用WebGL,就是由于WebGL的代码书写起来太过复杂,往往实现一个小的效果,却需要几百行代码,这极大的影响了我们的日常开发效率,因此才会有Tree.js的出现,目的就是提高开发效率,减少一定的学习成本。
差异方面具体可看:《Three.js入门指南》一书中的比较:http://www.ituring.com.cn/book/miniarticle/49782
还有youtube上的这个视频也不错:https://www.youtube.com/watch?v=YKzyhcyAijo
(虽然感觉这老哥说的英语不咋清楚,但总体看上两遍后也就可以听清楚了)
二、Three.js初探
three.js是画在canvans上的,因此我们首先需要申明canvans标签:
1 |
|
上面的幕布已经准备少了,下面就是需要使用Three.js来画东西了。首先要明确的是Three.js是由下面三者构成的:
- 渲染器(Renderer)
- 场景(Scene)
- 照相机(Camera)
2.1 渲染器(Renderer)
渲染器将和Canvas元素进行绑定,在这里我们使用的就是WebGLRenderer:1
2
3const renderer = new THREE.WebGLRenderer({
canvas: document.getElementById('mainCanvas')
})
当然,我们也能使用Three.js来生成一个canvas,这样我们就无需再将渲染器与canvas进行绑定了:
1 | const renderer = new THREE.WebGLRenderer() |
然后我就能来画这个canvas了:
1 | renderer.setClearColor(0x000000) |
就能看到一块黑色的背景:
2.2 场景(Scene)
我么在Three.js中所添加的物体都是添加到场景中的,因此场景其实就相当于一个大容器。一般说,场景里没有很复杂的操作,在程序最开始的时候进行实例化,然后将物体添加到场景中即可:
1 | const scene = new THREE.Scene() |
2.3 照相机(Camera)
在Three.js中,照相机可以说是最重要的一个工具了,我们使用所添加的物件都是需要它来进行定义的。这里,我们定义了一个透视投影的照相机:
1 | const camera = new THREE.PerspectiveCamera(45, 4 / 3, 1, 1000) |
2.4 画东西
在WebGL和Three.js中都有坐标系这一概念,他们两个使用的坐标系是右手坐标系:
我们在画东西的时候,就是根据这个坐标系来实现我们的物体的,比如我们需要实现一个长方形:
1 | const cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3), |
最后使用渲染器将场景和照相机渲染出来:
1 | renderer.render(scene, camera) |
总的效果如下:
参考资料:
- 《Three.js入门指南》
- https://www.youtube.com/watch?v=YKzyhcyAijo