详解Threejs中的光源对象

2021-12-02  本文已影响0人  fx67ll

光源的分类

  1. AmbientLight(环境光),PointLight(点光源),SpotLight(聚光源) 和 DirectionalLight(平行光)是基础光源
  2. HemisphereLight(半球光源),AreaLight(区域光源),LensFlare(镜头光晕) 是有特殊用途的光源

半球光源 HemisphereLight

半球光源的应用

如果不使用 THREE.HemisphereLight,要模拟户外光照,通常是创建一个 THREE.DirectionalLight 来模拟太阳光,并且可能再添加一个 THREE.AmbientLight 来为场景提供基础色

半球光源的常用属性

半球光源的代码示例

var hemiLight = new THREE.HemisphereLight(天空的反光颜色,地面的反光颜色,光的强度)
// 这个也是默认位置
hemiLight.position.set(0, 100, 0)
scene.add(hemiLight)

环境光 AmbientLight

环境光的代码示例

// THREE.AmbientLight不需要指定位置,只需要指定颜色(十六进制)
var ambientLight = new THREE.AmbientLight(0x0c0c0c)
scene.add(ambientLight)

环境光和半球光源的区别

点光源 PointLight

点光源的代码示例

var point = new THREE.PointLight(0xffffff)
//设置点光源位置,改变光源的位置
point.position.set(400, 200, 300)
scene.add(point)

平行光 DirectionalLight

平行光的代码示例

var directionalLight = new THREE.DirectionalLight(0xffffff, 1)
// 设置光源的方向:通过光源position属性和目标指向对象的position属性计算
directionalLight.position.set(80, 100, 50)
// 方向光指向对象网格模型mesh,可以不设置,默认的位置是0,0,0
directionalLight.target = mesh
scene.add(directionalLight)

聚光源 SpotLight

聚光源的代码示例

var spotLight = new THREE.SpotLight(0xffffff)
spotLight.position.set(200, 200, 200)
spotLight.target = mesh
// 设置聚光光源发散角度
spotLight.angle = Math.PI / 6
scene.add(spotLight)//光对象添加到scene场景中

什么是光投影

在具有方向光源的作用下,物体会形成阴影投影效果

如何光投影计算

Three.js物体投影模拟计算主要设置三部分

  1. 一个是设置产生投影的模型对象
  2. 一个是设置接收投影效果的模型
  3. 最后一个是光源对象本身的设置,光源如何产生投影

平行光投影计算代码示例

// 创建方向光光源
var directionalLight = new THREE.DirectionalLight(0xffffff, 1)
directionalLight.position.set(60, 100, 40)
scene.add(directionalLight)

// 设置用于计算阴影的光源对象
directionalLight.castShadow = true

// 设置计算阴影的区域,最好刚好紧密包围在对象周围,如果计算阴影的区域过大:模糊,如果过小:看不到或显示不完整
directionalLight.shadow.camera.near = 0.5
directionalLight.shadow.camera.far = 300
directionalLight.shadow.camera.left = -50
directionalLight.shadow.camera.right = 50
directionalLight.shadow.camera.top = 200
directionalLight.shadow.camera.bottom = -100

// 设置mapSize属性可以使阴影更清晰,不那么模糊
// directionalLight.shadow.mapSize.set(1024,1024)

聚光源投影计算代码示例

// 创建聚光光源
var spotLight = new THREE.SpotLight(0xffffff)
spotLight.position.set(50, 90, 50)
spotLight.angle = Math.PI /6
scene.add(spotLight)


// 设置用于计算阴影的光源对象
spotLight.castShadow = true

// 设置计算阴影的区域,注意包裹对象的周围
spotLight.shadow.camera.near = 1
spotLight.shadow.camera.far = 300
spotLight.shadow.camera.fov = 20

光投影计算的常用属性

参考文档一 ———— Threejs光源对象
参考文档二 ———— HemisphereLight和AmbientLight 区别
参考文档三 ———— Threejs官方示例

我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~ :)
转发请注明参考文章地址,非常感谢!!!

上一篇下一篇

猜你喜欢

热点阅读