「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」
示例代码采用three.js-r73版本: cdnjs.cloudflare.com/ajax/libs/t…
上节我们介绍了光基类、环境光、平行光,这次我们再介绍一个光的种类-点光源PointLight,让我们来看看吧。
点光源
- 点光源:由这种光源放出的光线来自同一点,且方向辐射自四面八方。
- 蜡烛放出的光,萤火虫放出的光。
- 手电筒的灯光,从一点发出
- 点光源是理想化为质点的向四面八方发出光线的光源。
- 点光源是抽象化了的物理概念,为了把物理问题的研究简单化。就像平时说的光滑平面,质点,无空气阻力一样,点光源在现实中也是不存在的,指的是从一个点向周围空间均匀发光的光源。
- 点光源时有一个衰减过程的,距离越近,光强越大,距离越远,光强越小
- 点光源可以向四面八方发射光
- 点光源用PointLight来表示,它的构造函数如下所示
THREE.PointLight = function ( color, intensity, distance, decay )
- color:光的颜色
- Intensity:光的强度,默认是1.0,就是说是100%强度的灯光,
- distance:光的距离,从光源所在的位置,经过distance这段距离之后,光的强度将从Intensity衰减为0。 默认情况下,这个值为0.0,表示光源强度不衰减。
- decay: 沿着光照距离的衰退量默认1
实战
- 修改我们的代码,创建点光源和多个物体
let param;
let light;
let lightPos
function initLight() {
var ParamObj = function () {
this.x = 0;
this.y = 0;
this.z = 0;
this.decay = 1; // 衰减程度
}
param = new ParamObj();
var gui = new dat.GUI();
gui.add(param, "x", -10000, 10000).name('点光源X的位置')
gui.add(param, "y", -10000, 10000).name('点光源Y的位置')
gui.add(param, "z", -2000, 2000).name('点光源Z的位置')
gui.add(param, "decay", 0, 1).name('衰减程度')
// 点光源定义为红色
light = new THREE.PointLight(0xFF0000, 1, 1000, param.decay)
light.position.set(param.x, param.y, param.z)
scene.add(light)
}
function initObject() {
var geometry = new THREE.CubeGeometry(200, 100, 50, 4, 4);
var material = new THREE.MeshLambertMaterial({ color: 0xFF0000 });
var mesh = new THREE.Mesh(geometry, material);
mesh.position.set(0, 0, 0);
scene.add(mesh);
var geometry2 = new THREE.CubeGeometry(200, 100, 50, 4, 4);
var material2 = new THREE.MeshLambertMaterial({ color: 0xFF0000 });
var mesh2 = new THREE.Mesh(geometry2, material2);
mesh2.position.set(-300, 0, 0);
scene.add(mesh2);
var geometry3 = new THREE.CubeGeometry(200, 100, 50, 4, 4);
var material3 = new THREE.MeshLambertMaterial({ color: 0xFF0000 });
var mesh3 = new THREE.Mesh(geometry3, material3);
mesh3.position.set(0, -150, 0);
scene.add(mesh3);
var mesh4 = new THREE.Mesh(geometry3, material3);
mesh4.position.set(0, 150, 0);
scene.add(mesh4);
var mesh5 = new THREE.Mesh(geometry3, material3);
mesh5.position.set(300, 0, 0);
scene.add(mesh5);
var mesh6 = new THREE.Mesh(geometry3, material3);
mesh6.position.set(0, 0, -100);
scene.add(mesh6);
}
function changeLightPos() {
light.position.set(param.x, param.y, param.z);
light.decay = param.decay
}
- 默认点光源的位置在(0,0,0),光对周围物体进行照射,我们可以看到中间物体周围物体对应的面显示成红色
- 调整点光源的z位置到80,调整衰减为0.8,可以看到距离点光源越近,光越亮,所以点光源是一个发散的光源
总结
这一节我们主要讲了以下内容:
- 点光源介绍
- 实战使用点光源