Three.js - 光源使用详解1(环境光 AmbientLight、点光源 PointLint)
Three.js 中有许多不同种类的光源,每种光源都有特别的行为和用法。下面通过一个系列文章介绍它们的用法。



4,效果图
(3)光源的 distance 属性决定了在光线强度变为 0 之前光线的传播距离。默认为 0,表示光线强度不会随着距离的增加而减弱。
一、THREE.AmbientLight(环境光)
1,基本介绍
- 在创建 THREE.AmbientLight 时,颜色会应用到全局。
- 该光源并没有特别的来源方向,并且 THREE.AmbientLight 不会产生阴影。
2,使用建议
- 通常,不能将 THREE.AmbientLight 作为场景中唯一的光源,因为它会将场景中的所有物体渲染为相同的颜色,而不管是什么形状。
- 在使用其他光源(如 THREE.SpotLight 或者 THREE.DirectionLight)的同时使用它,目的是弱化阴影或给场景添加一些额外的颜色。
3,使用样例
由于 THREE.AmbientLight 光源不需要指定位置并且会应用到全局,所以我们只需要指定个颜色,然后将其添加到场景中即可。
var ambientLight = new THREE.AmbientLight(0x523318); scene.add(ambientLight);
4,效果图
(1)下面是场景中只使用 AmbientLight 这一种光源的情况(颜色分别为:0x523318、0xffffff)

(2)下面场景中除了 AmbientLight 光源外(颜色分别为:0x523318、0xffffff),还添加了个 SpotLight(颜色:0xffffff)

(3)下面是场景只使用一个 SpotLight 光源(颜色:0xffffff)的效果,大家可以比较下。

二、THREE.PointLight(点光源)
1,基本介绍
- THREE.PointLight 是一种单点发光、照射所有方向的光源(比如夜空中的照明弹就是一个点光源例子)
- THREE.PointLight 不会产生阴影。因为它会朝所有的方向发射光线,在这种情况下计算阴影对 GPU 是个沉重的负担。
2,属性介绍
- color:光源的颜色
- distance:光源照射的距离。默认值为 0,意味着光的强度不会随着距离的增加而减少。
- intensity:光源照射的强度。默认值为 1。
- position:光源在场景中的位置。
- visible:设为 ture(默认值),光源就会打开。设为 false,光源就会关闭。
3,使用样例
这里我们只指定了光源的颜色和位置(其它属性使用默认值),并将其添加到场景中。
var pointLight = new THREE.PointLight("#ccffcc"); pointLight.position.set(0,10,10); scene.add(pointLight);
4,效果图
(1)上面样例中我们往场景中添加了个绿色的点光源,效果如下:

(2)我们如果将光源的 intensity 属性设为 2.4,表示亮度为默认的 2.4 倍,效果图如下:

pointLight.intensity = 2.4;
(3)光源的 distance 属性决定了在光线强度变为 0 之前光线的传播距离。默认为 0,表示光线强度不会随着距离的增加而减弱。
这里我们接着把 distance 属性设为 22,表示光线在距离为22的地方慢慢地减少为 0。

pointLight.distance = 22;