携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情 >>
今天我们来讨论个中光源种类的创建方法与使用效果:
AmbientLight 环境光
环境光会均匀的照亮场景中的所有物体。环境光不能用来投射阴影,因为它没有方向。环境光不能投射阴影。
参数:AmbientLight( color, intensity ),即光的颜色、光照强度.
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
// const ambientLight = new THREE.AmbientLight();
// ambientLight.color = new THREE.Color(0xffffff);
// ambientLight.intensity = 0.5;
scene.add(ambientLight);
DirectionalLight 平行光
平行光是沿着特定方向发射的光。这种光的表现像是无限远,从它发出的光线都是平行的。常常用平行光来模拟太阳光 的效果; 太阳足够远,因此我们可以认为太阳的位置是无限远,所以我们认为从太阳发出的光线也都是平行的。平行光可以投射阴影。
const directionalLight = new THREE.DirectionalLight(0x00fffc, 0.3);
// 改变光的方向
directionalLight.position.set(1, 0.25, 0);
scene.add(directionalLight);
HemisphereLight 半球光
光源直接放置于场景之上,光照颜色从天空光线颜色渐变到地面光线颜色。半球光不能投射阴影。
参数:HemisphereLight( skyColor, groundColor, intensity ),即天空中光线颜色、地面光线颜色、光照强度.
// 光源直接放置于场景之上,光照颜色从天空颜色渐变到地面光线颜色
const hemisphereLight = new THREE.HemisphereLight(
0xff0000,
0x0000ff,
0.3
);
scene.add(hemisphereLight);
PointLight 点光源
从一个点向各个方向发射的光源。一个常见的例子是模拟一个灯泡发出的光。点光源可以投射阴影。
const pointLight = new THREE.PointLight(0xff9000, 0.5, 1);
// 改变点光源位置
pointLight.position.set(1, -0.5, 1);
scene.add(pointLight);
RectAreaLight 平面光光源
平面光光源从一个矩形平面上均匀地发射光线。这种光源可以用来模拟像明亮的窗户或者条状灯光光源。只支持 MeshStandardMaterial 和 MeshPhysicalMaterial 两种材质。不支持阴影。
const rectAreaLight = new THREE.RectAreaLight(0x4e00ff, 2, 2, 1); // 颜色,强度,宽度,高度
rectAreaLight.position.set(-1.5, 0, 1.5);
rectAreaLight.lookAt(new THREE.Vector3());
scene.add(rectAreaLight);
SpotLight 聚光灯
光线从一个点沿一个方向射出,随着光线照射的变远,光线圆锥体的尺寸也逐渐增大。
参数:SpotLight( color, intensity, distance, angle, penumbra, decay ),即光照颜色、光照强度、从光源发出光的最大距离、光线散射角度、聚光锥的半影衰减百分比、沿着光照距离的衰减量。
const spotLight = new THREE.SpotLight(
0x78ff00,
0.5,
10,
Math.PI * 0.1,
0.25,
1
);
spotLight.position.set(0, 2, 3);
scene.add(spotLight);
关于灯光的辅助对象,我们下一篇再来讨论 (´・ᴗ・`) 。