(十) ThreeJS入门 THREE.Light(灯光) 详解

在 Three.js 中,THREE.Light 是所有光源类型的基类,并不是直接实例化的对象。光源在 Three.js 场景中用于模拟光照效果,可以极大地影响场景的外观和氛围。Three.js 提供了多种不同类型的光源,包括:

  • THREE.AmbientLight (环境光)
  • THREE.DirectionalLight (平行光/定向光)
  • THREE.PointLight (点光源)
  • THREE.SpotLight (聚光灯)
  • THREE.HemisphereLight (半球光)
  • THREE.RectAreaLight (矩形区域光)
1. THREE.AmbientLight (环境光)

环境光是一种非方向性的光源,它均匀地照亮整个场景中的所有物体。环境光不产生阴影,也不考虑物体表面的方向,因此它主要用于提供基础的亮度。

示例代码:
var ambientLight = new THREE.AmbientLight(0xffffff, 0.5); // 白色,强度0.5
scene.add(ambientLight);
2. THREE.DirectionalLight (平行光/定向光)

定向光模拟太阳光或其他远离场景的光源,光线平行地照射到场景中的每一个物体上。定向光会产生阴影,并且可以设置颜色和强度。

示例代码:
var directionalLight = new THREE.DirectionalLight(0xffffff, 1.0); // 白色,强度1.0
directionalLight.position.set(1, 1, 1).normalize(); // 设置光源位置
scene.add(directionalLight);
3. THREE.PointLight (点光源)

点光源是从一个点向四周发射光线的光源。这种光源会产生阴影,并且可以根据距离衰减。

示例代码:
var pointLight = new THREE.PointLight(0xff0000, 1.0, 100); // 红色,强度1.0,距离100
pointLight.position.set(0, 10, 0); // 设置光源位置
scene.add(pointLight);
4. THREE.SpotLight (聚光灯)

聚光灯是一种具有锥形光照区域的光源,类似于舞台上的聚光灯。聚光灯可以有光束角和外圈角,也可以根据距离衰减。

示例代码:
var spotLight = new THREE.SpotLight(0xff0000, 1.0); // 红色,强度1.0
spotLight.position.set(40, 40, 40); // 设置光源位置
spotLight.castShadow = true; // 开启阴影
spotLight.angle = Math.PI / 5; // 设置光束角
spotLight.distance = 100; // 设置距离
spotLight.penumbra = 0.05; // 设置外圈角
scene.add(spotLight);
5. THREE.HemisphereLight (半球光)

半球光模拟天空和地面的光照效果,由两个光源组成:一个在上方,一个在下方。这种光源常用于模拟自然环境的光照。

示例代码:
var hemisphereLight = new THREE.HemisphereLight(0xffffbb, 0x080820, 1.0); // 天空颜色,地面颜色,强度1.0
scene.add(hemisphereLight);
6. THREE.RectAreaLight (矩形区域光)

矩形区域光模拟一个矩形面光源,可以用来创建柔和的阴影效果。这是一种较新的光源类型,适用于模拟灯箱、LED 屏幕等。

示例代码:
var rectAreaLight = new THREE.RectAreaLight(0xffffff, 1.0, 10, 10); // 白色,强度1.0,宽度10,高度10
rectAreaLight.position.set(0, 10, 0); // 设置光源位置
rectAreaLight.lookAt(new THREE.Vector3()); // 设置光源方向
scene.add(rectAreaLight);
共同属性

所有光源都有一些共同的属性:

  • color - 光的颜色。
  • intensity - 光的强度。
  • castShadow - 是否开启阴影投射。
  • shadow - 关联的阴影映射器(只有某些光源支持)。

你可能感兴趣的:(three.js,vue)