[关闭]
@heqinglin 2019-04-18T13:31:04.000000Z 字数 3224 阅读 50

threeJS中的光源

WebGL


  • 仅以下灯光可以投射阴影
  • DirectionalLight(环境光)
  • PointLight(点光)
  • SpotLight(聚光灯)

AmbientLight(环境光)

此灯全局均匀地照亮场景中的所有对象
此灯不能用于投射阴影,因为它没有方向

  1. var light = new THREE.AmbientLight(0x404040);

构造函数

  1. AmbientLight( color : Integer, intensity : Float )

color - (可选)颜色默认值是0xffffff
intensity - (可选)灯光强度/强度的数值。默认值为1

DirectionalLight(定向光)

一种在特定方向发射的光。这种光的行为就好像它是无限远的,并且由它产生的光线都是平行的。
这种情况的常见用例是模拟日光;太阳足够远,它的位置可以被认为是无限的,并且来自它的所有光线都是平行的。
此灯光可以投射阴影

  1. var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );

构造函数

  1. DirectionalLight( color : Integer, intensity : Float )

属性

  1. .castShadow: Boolean

如果设置为true,则会投射动态阴影。警告:这很昂贵,需要调整以使阴影看起来正确。有关详细信息,请参阅DirectionalLightShadow。默认值为false。

  1. .position : Vector3
  1. .shadow : DirectionalLightShadow

参阅DirectionalLightShadow用于计算阴影

  1. .target : Object3D

DirectionalLight从其位置指向target.position。目标的默认位置是(0,0,0)。
注意:要将目标的位置更改为默认值以外的任何位置,必须使用将其添加到场景中scene.add( light.target );这样,目标的matrixWorld每帧都会自动更新。
也可以将目标设置为场景中的另一个对象(具有position属性的任何对象 ),如下所示:

  1. var targetObject = new THREE.Object3D();
  2. scene.add(targetObject);
  3. light.target = targetObject;

现在,directionalLight将跟踪目标对象。

HemisphereLight(半球光)

直接位于场景上方的光源,从天空颜色到底色的颜色渐渐消失。
此灯不能用于投射阴影。

  1. var light = new THREE.HemisphereLight( 0xffffbb, 0x080820, 1 );

构造函数

  1. HemisphereLightskyColorIntegergroundColorIntegerintensityFloat

skyColor - (可选)天空的十六进制颜色。默认值为0xffffff。
groundColor - (可选)地面的十六进制颜色。默认值为0xffffff。
Integer - (可选)灯光强度/强度的数值。默认值为1.

属性

  1. .color : Float

灯光的天空颜色,在构造函数中传递。默认值是白色(0xffffff)。

  1. .groundColor : Float

灯光都地面色,如构造函数中传递的那样。默认值是白色(0xffffff)。

  1. .position : Vector3

PointLight(点光)

  1. var light = new THREE.PointLight( 0xff0000, 1, 100 );

构造函数

  1. PointLight( color : Integer, intensity : Float, distance : Number, decay : Float )

color - (可选)颜色默认值是0xffffff
intensity - (可选)灯光强度/强度的数值。默认值为1
distance - 灯光的最大范围。默认值为0(无限制)。
decay - 衰变光线沿光线距离变暗的量。默认值为1.对于物理上正确的光照,请将其设置为2.

属性

  1. .decay : Float

光线沿光线距离变暗的量
在物理校正模式下,衰减= 2会导致物理上逼真的光线衰减。
默认值为1。

  1. .distance : Float

默认模式 - 当距离为零时,灯不会衰减。当距离不为零时,光线将从光线位置处的最大强度线性衰减到距离光线此距离处的零点。

  1. .power : Float

光的力量。
在物理校正模式下,光的发光功率以流明为单位测量。默认值为4Math.PI。
这与比率 的强度直接相关 ,改变这也会改变强度。power = intensity * 4π

  1. .shadow : DirectionalLightShadow

参阅DirectionalLightShadow用于计算阴影

RectAreaLight

RectAreaLight在面上均匀地发出一个矩形平面的光。这种灯型可用于模拟光源,如明亮的窗户或条形照明。
此灯不能用于投射阴影。
仅支持MeshStandardMaterial和MeshPhysicalMaterial。
您必须在场景中包含RectAreaLightUniformsLib

  1. var width = 10;
  2. var height = 10;
  3. var intensity = 1;
  4. var rectLight = new THREE.RectAreaLight( 0xffffff, intensity, width, height );
  5. rectLight.position.set( 5, 5, 0 );
  6. rectLight.lookAt( 0, 0, 0 );
  7. scene.add( rectLight )
  8. rectLightHelper = new THREE.RectAreaLightHelper( rectLight );
  9. rectLight.add( rectLightHelper );

构造函数

  1. RectAreaLight( color : Integer, intensity : Float, width : Float, height : Float )

color - (可选)十六进制颜色的光。默认值为0xffffff(白色)
intensity - (可选)灯光强度或亮度。默认值为1
width - (可选)灯光宽度。默认值为10
height - 可选)灯光高度。默认值为10

SpotLight(聚光灯)

这种光从一个方向上的单个点沿着一个锥体发出,该锥体的尺寸越大,距离得到的光越远。
此灯可以投射阴影 - 有关详细信息,请参阅SpotLightShadow页面。

  1. var spotLight = new THREE.SpotLight( 0xffffff );
  2. spotLight.position.set( 100, 1000, 100 );
  3. spotLight.castShadow = true;
  4. spotLight.shadow.mapSize.width = 1024;
  5. spotLight.shadow.mapSize.height = 1024;
  6. spotLight.shadow.camera.near = 500;
  7. spotLight.shadow.camera.far = 4000;
  8. spotLight.shadow.camera.fov = 30;
  9. scene.add( spotLight );

构造函数

  1. SpotLight( color : Integer, intensity : Float, distance : Float, angle : Radians, penumbra : Float, decay : Float )

color - (可选)十六进制颜色的光。默认值为0xffffff(白色)
intensity - (可选)灯光强度/强度的数值。默认值为1

distance - 灯光的最大范围。默认值为0(无限制)
angle - 从其上限为Math.PI / 2的方向的最大光散射角
penumbra - 由半影而衰减的聚光锥的百分比。取值介于0和1之间。默认值为零。
decay - 衰变光线沿光线距离变暗的量

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注