用Three.js写一个好看的动画片

我们在new THREE.PerspectiveCamera的时候确定照相机的视野范围,对应上图,45是fov,就是视野上下边缘之间的夹角。window.innerWidth / window.innerHeight是视野水平方向和竖直方向长度的比值,0.1(near)和1000(far)分别是照相机到视景体最近、最远的距离,这些参数决定了要显示的三维空间的范围,也就是上图中的灰色区域。

camera.position.set(-30, 40, 30)确定了照相机在空间中的坐标。

camera.lookAt(0,0,0)确定了照相机聚焦点,该点和照相机坐标的连线就是拍摄方向。

上图中的灰色区域在屏幕上的显示效果,也就是将三维空间的坐标投影到屏幕二维坐标是webgl完成的,我们只需要关心三维空间的坐标。

坐标系

与我们之前讲到的CSS的3D坐标系[2]不同,webgl坐标系是右手坐标系,X轴向右,Y轴向上,Z轴是指向“自己”的。

伸出右手,让拇指和食指成"L"形,大拇指向右,食指向上。其余的手指指向自己,这样就建立了一个右手坐标系。

其中,拇指、食指和其余手指分别代表x,y,z轴的正方向

在空间中定位、平移都比较好理解,这里看一下旋转。

有时,我们会这样设置物体的旋转:object.rotation.x = \-Math.PI / 2,表示的是绕X轴旋转-90度。具体是怎么旋转,就要对照上面坐标系,展开右手,拇指指向x轴正方向,其余手指的弯曲方向就是旋转的正方向;拇指指向x轴负方向,其余手指的弯曲方向就是旋转的负方向。y轴和z轴旋转方向的判断同理。

物体

在three.js中,创建一个物体需要两个参数:几何形状(Geometry)和 材质(Material)。通俗的讲,几何形状决定物体的形状,材质决定物体表面的颜色、纹理贴图、对光照的反应等等。


  1. //创建一个平面几何体,参数是沿X方向的Width和沿Y方向的height  
  2. const planeGeometry = new THREE.PlaneGeometry(60,20)    
  3. //创建一种材质,MeshLambertMaterial是一种考虑漫反射而不考虑镜面反射的材质  
  4. const planeMaterial = new THREE.MeshLambertMaterial({  
  5.   color: 0xAAAAAA  
  6. })    
  7. //根据几何形状和材质创建物体  
  8. const plane = new THREE.Mesh(planeGeometry, planeMaterial)  
  9. //设置物体的位置和旋转,并将物体加到场景(scene)中 
  10. plane.rotation.x = -Math.PI / 2  
  11. plane.position.set(15, 0, 0)  
  12. scene.add(plane) 

一些常用的几何形状和材质可以参考Three.js入门指南[3]

光照

没有光源,渲染的场景将不可见(除非你使用基础材质或线框材质,当然,在构建3D应用时,几乎不怎么用基础材质和线框材质)。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章