Three.js开发指南-Scene

3,669 阅读2分钟

构建Three.js场景基本组件

在Three.js中最基础的就是THREE.Scene(建立一个场景),我们拥有一个场景后才能往场景里添加摄像机、对象和光源,让用户能看到东西在浏览器上。

THREE.Sence对象有时候被称为场景图,可以用来保存所有图形场景的必要信息。在Three.js中,这意味这THREE.Sence保存所有对象、光源和渲染所需要的其他对象。有趣的是,场景图,顾名思义,不仅仅是一个对象数组,甚至包括THREE.Sence本身,都是继承自一个THREE.Object3D的对象。

场景的基本功能

创建一个场景对象很简单:

let Scene = new THREE.Sence()

向场景里添加对象,比如摄像机:

let camera = new THREE.PerspectiveCamera(45,window.innerWidthwindow.innerHeight,0.1,1000)
Scene.add(camera)

你还可以获取到场景里,你添加过的对象列表

Scene.children

sence还有一个方法,你可以获取场景中特定的对象(当然,你在创建这个对象的时候就给这个对象命名了)

Scene。getObjectbyName()

有添加对象,就有移除对象

Scene.remove(obj) //这里的obj就是指你想删除的对象

给场景添加雾化效果

使用fog属性就可以给整个场景添加雾化效果。雾化效果就是:场景中的物体里的越远就会变得越模糊。

Scene.fog = new THREE.Fog(0xffffff,0.015,100)
new THREE.Fog(color,near,far) 备注
color 颜色值
near (近处)属性的值,雾化开始的地方
far (远处),雾化结束的地方
Scene.fog = new THREE.FogExp2(0xffffff,0.01)

这个方法中不在指定near和far属性,只需要设置雾的颜色和浓度即可。需要注意的是,该雾的浓度不再是线性增长的,而是随着距离呈 指数增长

new THREE.FogExp2( color : Integer, density : Float ) 备注
color 颜色值
density 指数值

使用overrideMaterial属性

当设置了这个属性,场景中的所有物体就会使用该属性指向的材质,即物体本身也设置了材质。

scene.overrideMaterial = new `THREE.MeshLambertMateria`l({color:0xffffff})

注意:在这里我们使用了THREE.MeshLambertMateria材质类型。后面材质专栏还会仔细说明。

  • 这种材质可以用来创建暗淡的并不光亮的表面。
  • 无光泽表面的材质,无镜面高光。
  • 这可以很好地模拟一些表面(如未经处理的木材或石头),但不能用镜面高光(如上漆木材)模拟光泽表面。
  • 该材质非常易用,而且会对场景中的光源产生反应。
  • 可以配置的前面的提高的属性:color、opacity、shading、blending、depthTest、depthWrite、wireframe、wireframeLinewidth、wireframeLinecap、wireframeLineJoin、vertexColors和fog。