05-光源

光源类型

基础光源

名称描述
环境光 AmbientLight基础光源,作用在当前场景内的所有物体上
点光源 PointLight空间中的一个点,向所有方向发射光线,如:恒星光源
聚光灯光源 SpotLight如:灯光、手电筒等
平行光DirectionalLight如:太阳光照射在地球上

特殊光源

名称描述
半球光 HemisphereLight可以参考夕阳和日出时的光,创建更加自然的户外效果
面光源 AreaLight散发光线的平面,不是一个点

光源特殊效果

名称描述
镜面眩光 LensFlare不是光源,但是可以为光源添加眩光效果

聚光灯光源

  • 锥形效果,可以参考手电筒、路灯等光源。(需要设置光源位置)
  • 可以生成阴影
new THREE.SpotLight (color,intensity,distance,angle,exponent)
参数名称描述默认值
color光源颜色
intensity光照强度1
distance光源到光源结束的距离0(不会随着距离衰减)
angle光线散射角度Math.PI / 3
exponent沿着光照距离的衰退量10
initControls(spotLight);

环境光

  • 不需要设置位置,对整个场景内的对象都生效
  • 没有特定的来源,也不会影响阴影的形成
  • 不能作为场景内的唯一光源,需要配合其他光源使用
  • 用来减弱阴影,或者给物体添加一些颜色
const ambientLight = new THREE.AmbientLight(0x000000);
// 添加环境光
const ambientLight = new THREE.AmbientLight(0x000000);
scene.add(ambientLight);
initControls(ambientLight);

点光源

  • 单点发光,照射所有方向的光源。(需要设置光源位置)
  • 不会生成阴影
new THREE.PointLight(color, intensity, distance)
参数名称描述默认值
color光源颜色
intensity光照强度1
distance光源到光源结束的距离0(不会随着距离衰减)
// 添加灯光
const pointLight = new THREE.PointLight(0xffffff);
spotLight.position.set(-10,10,90);
scene.add(pointLight);
// 设置灯光开启阴影
pointLight.castShadow = true;
initControls(pointLight);

平行光

  • 平行光也可以成为太阳光
  • 会生成阴影
// 添加灯光
const directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(-10,10,90);
scene.add(directionalLight);
directionalLight.castShadow = true;
renderer.shadowMapEnabled = true;

directionalLight.shadowCameraLeft = -50;
directionalLight.shadowCameraRight = 50;
directionalLight.shadowCameraTop = 50;
directionalLight.shadowCameraBottom = -50;
directionalLight.shadowCameraNear = 2;
directionalLight.shadowCameraFar = 200;

directionalLight.shadowMapWidth = 4096;
directionalLight.shadowMapHeight = 4096;

initControls(directionalLight);

半球光

  • 模拟室外自然光照
  • 不会生成阴影
// 添加灯光
const hemisphereLight = new THREE.HemisphereLight(0xff00ff, 0x00ff00);
hemisphereLight.position.set(-10,10,30);
scene.add(hemisphereLight);
initControls(hemisphereLight);
const animation = () => {
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.01;

    hemisphereLight.position.z -= 0.1;

    // 渲染
    renderer.render(scene, camera);

    requestAnimationFrame(animation);
}
animation()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值