Three.js中的光源

Threejs中的各种光源

作为3D技术的发展趋势,浏览器端3D技术越来越被一些技术公司重视。由此,Threejs非常注重3D渲染效果的真实性,对渲染真实性来说,使用光源是比不可少的技巧。Threejs,在光源方面提供了多种光源供选择。

1、 光源基类

在Threejs中,光源用Light表示,它是所有光源的基类。它的构造函数是:

THREE.Light ( hex )

它有一个参数hex,接受一个16进制的颜色值。例如要定义一种红色的光源,我们可以这样来定义:

Var redLight = new THREE.Light(0xFF0000);

环境光

环境光是经过多次反射而来的光称为环境光,无法确定其最初的方向。环境光是一种无处不在的光。环境光源放出的光线被认为来自任何方向。因此,当你仅为场景指定环境光时,所有的物体无论法向量如何,都将表现为同样的明暗程度。 (这是因为,反射光可以从各个方向进入您的眼睛)

环境光用THREE.AmbientLight来表示,它的构造函数如下所示:

THREE.AmbientLight( hex )

它仍然接受一个16进制的颜色值,作为光源的颜色。环境光将照射场景中的所有物体,让物体显示出某种颜色。环境光的使用例子如下所示:

var light = new THREE.AmbientLight( 0xff0000 );

scene.add( light );

只需要将光源加入场景,场景就能够通过光源渲染出好的效果来了。


点光源

点光源:由这种光源放出的光线来自同一点,且方向辐射自四面八方。例如蜡烛放出的光,萤火虫放出的光。

点光源用PointLight来表示,它的构造函数如下所示:

PointLight( color, intensity, distance )

这个类的参数稍微复杂一些,我们花点时间来解释一下:

Color:光的颜色

Intensity:光的强度,默认是1.0,就是说是100%强度的灯光,

distance:光的距离,从光源所在的位置,经过distance这段距离之后,光的强度将从Intensity衰减为0。 默认情况下,这个值为0.0,表示光源强度不衰减。

聚光灯

聚光灯:这种光源的光线从一个锥体中射出,在被照射的物体上产生聚光的效果。使用这种光源需要指定光的射出方向以及锥体的顶角α。聚光灯示例如图所示:


聚光灯的构造函数是:

THREE.SpotLight( hex, intensity, distance, angle, exponent )

函数的参数如下所示:

Hex:聚光灯发出的颜色,如0xFFFFFF

Intensity:光源的强度,默认是1.0,如果为0.5,则强度是一半,意思是颜色会淡一些。和上面点光源一样。

Distance:光线的强度,从最大值衰减到0,需要的距离。 默认为0,表示光不衰减,如果非0,则表示从光源的位置到Distance的距离,光都在线性衰减。到离光源距离Distance时,光源强度为0.

Angle:聚光灯着色的角度,用弧度作为单位,这个角度是和光源的方向形成的角度。

exponent:光源模型中,衰减的一个参数,越大衰减约快。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Three.js,点光源(Point Light)是常用的一种光照类型,它模拟的是一个发光的小点,通常用于创建局部或集光线效果。要创建一个点光源,你可以按照以下步骤进行: 1. 引入Three.js库和相关模块: ```javascript import * as THREE from 'three'; ``` 2. 创建一个新的点光源实例: ```javascript const pointLight = new THREE.PointLight(0xffffff, // 发光颜色 1.0, // 光源强度 0.5); // 光照衰减系数,范围从0到1,0表示无衰减 ``` 这里,`0xffffff`代表白色光源,`1.0`是强度(默认为1),`0.5`是光照衰减系数,值越小灯光越集。 3. 定义光源的位置: ```javascript pointLight.position.set(0, 10, 10); // 设置光源的初始位置 ``` 这一步非常重要,因为光源位置决定了光照的方向和范围。 4. 将光源添加到场景: ```javascript scene.add(pointLight); ``` `scene`是Three.js的主场景对象,将光源添加进去才能让它参与渲染。 5. 渲染器设置: ```javascript renderer.render(scene, camera); // 渲染器(Renderer)渲染场景 ``` 完整的示例代码片段如下: ```javascript // 初始化 const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); // 创建光源 const pointLight = new THREE.PointLight(0xffffff, 1.0, 0.5); pointLight.position.set(0, 10, 10); // 添加光源到场景 scene.add(pointLight); // 创建渲染器和渲染 const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 渲染循环 function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate(); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值