跳至主要內容

DirectionalLight

yisky大约 2 分钟组件文档组件DirectionalLight

DirectionalLight——方向光组件,沿着特定方向发射。这种光的表现像是无限远,从它发出的光线都是平行的。常常用平行光来模拟太阳光的效果。 太阳足够远,因此我们可以认为太阳的位置是无限远,所以我们认为从太阳发出的光线也都是平行的。

创建

import { Vector3 } from 'three';
import { DirectionalLight } from '@fantasy3d/core';

const { rootEntity } = scene;

// 在场根实体上添加方向光组件
rootEntity.addComponent( DirectionalLight, {

    color: '#ffffff',                           // 方向光颜色
    intensity: 1.0 * Math.PI,                   // 方向光强度
    position: new Vector3( 20.0, 20.0, 20.0 ),  // 方向光位置
    target: new Vector3( 0.0, 0.0, 0.0 )        // 方向光目标点

} );

提示

DirectioanlLight 组件初始化参数,详见 DirectionalLightOptions

阴影

DirectionalLight 组件支持阴影,可以在初始化时设置阴影参数,如下所示:

import { Vector3 } from 'three';
import { DirectionalLight } from '@fantasy3d/core';

const { rootEntity } = scene;

// 在场根实体上添加环境光组件
rootEntity.addComponent( DirectionalLight, {

    color: '#ffffff',                           // 方向光颜色
    intensity: 1.0 * Math.PI,                   // 方向光强度
    position: new Vector3( 20.0, 20.0, 20.0 ),  // 方向光位置
    target: new Vector3( 0.0, 0.0, 0.0 ),       // 方向光目标点
    castShadow: true,                           // 开启阴影投射
    // 阴影参数
    shadow: {

        bias: -0.005,
        mapSize: 2048,
        camera: {

            near: 0.1,
            far: 1000.0,
            frustumSize: 1024

        }

    }

} );

提示

阴影参数,详见 LightShadowOptions

重要

引擎(Engine)创建时,需要启用阴影图,否则灯光阴影不生效,如下所示:

import { PCFSoftShadowMap } from 'three';
import { Engine } from '@fantasy3d/core';

// 创建引擎对象
const engine = new Engine( {
   
  gl: {

      ........

      // 阴影图参数
      shadowMap: {

          eanbled: true,          // 启用阴影图
          type: PCFSoftShadowMap  // 阴影图类型    

      }

      ........   

  }

} );

属性

  • light - 获取 three.js 原生方向光对象(DirectionalLightopen in new window),只读属性。

  • color - 设置方向光颜色,只写属性。

  • intensity - 设置方向光强度,只写属性。

  • position - 设置方向光位置(本地坐标系),只写属性。

  • target - 设置方向光目标位置(本地坐标系),只写属性。

  • direction - 设置方向光朝向(本地坐标系),只写属性。

方法

提示

setTarget 第二个参数定义“目标位置”是本地坐标系还是世界坐标系,默认 false 本地坐标系。

上次编辑于: