Threejs入门之四:Threejs中的光

这篇具有很好参考价值的文章主要介绍了Threejs入门之四:Threejs中的光。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面我们用Threejs创建了一个3D立方体到浏览器,并使其跟随鼠标旋转和缩放,但是,上帝说要有光,于是就有了光~~~额,好吧,这一节我们来认识下Threejs中的灯光,Threejs提供了很多灯光的API,这里我们主要了解下环境光(AmbientLight)、点光(PointLight)、平行光(DirectionalLight)、和聚光灯(SpotLight)。
1.AmbientLight:环境光会均匀的照亮场景中的所有物体,环境光没有方向,所以环境光不能用来投射阴影。AmbientLight对象接收两个参数,第一个参数为光的颜色(颜色的rgb数值。缺省值为 0xffffff),第二个参数为光的强度(取值范围0-1,默认为1)

在index.js中添加如下代码,即可创建环境光并添加到场景中

// 创建环境光
const light = new THREE.AmbientLight(0x404040,,0.6)
scene.add(light)

添加完成后运行浏览器,发现浏览器并没有任何变化
threejs 光线,ThreeJS,javascript,html5,3d
这是因为我们在之前选择材质的时间选择的是基础网格材质(MeshBasicMaterial),这种材质是不受光照影响的,所以,我们要把之前的材质进行修改,修改为Lambert网格材质(MeshLambertMaterial),这是一种非光泽表面的材质,没有镜面高光。它可以很好地模拟一些表面(例如未经处理的木材或石材),但不能模拟具有镜面高光的光泽表面(例如涂漆木材)
找到之前创建的材质,修改代码如下

const material = new THREE.MeshLambertMaterial({
  color:0xff0000,//设置颜色 
})

threejs 光线,ThreeJS,javascript,html5,3d
此时发现场景中的物体明显变暗了
2.PointLight:点光源,从一个点向各个方向发射的光源。比如灯泡发出的光。
PointLight( color : Integer, intensity : Float, distance : Number, decay : Float )接收四个参数,
color - (可选参数)) 十六进制光照颜色。 缺省值 0xffffff (白色)
intensity - (可选参数) 光照强度。 缺省值 1。
distance - 这个距离表示从光源到光照强度为0的位置。 当设置为0时,光永远不会消失(距离无穷大)。缺省值 0.
decay - 沿着光照距离的衰退量。缺省值 1
创建一个点光源并添加到场景中

// 创建点光 参数1 光的颜色,参数2 光的强度
const pointLight = new THREE.PointLight(0xffffff,1)

就想生活中的灯泡是在屋顶中央的位置安装一样,我们在Threejs中也要给点光源一个位置,然后将其添加到场景中

// 点光源的位置 
pointLight.position.set(400,300,200)
scene.add(pointLight)

此时运行浏览器,可以看到物体表明已经有了明暗变化,光能照到的地方是亮的,找不到的地方是暗的。
threejs 光线,ThreeJS,javascript,html5,3d
3.DirectionalLight:平行光是沿着特定方向发射的光。可以理解为这种光是无限远的,从它发出的光线都是平行的。常常用平行光来模拟太阳光 的效果; 太阳足够远,因此我们可以认为太阳的位置是无限远,所以我们认为从太阳发出的光线也都是平行的。
平行光可以投射阴影

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

threejs 光线,ThreeJS,javascript,html5,3d
4.SpotLight:聚光灯:光线从一个点沿一个方向射出,随着光线照射的变远,光线圆锥体的尺寸也逐渐增大。
该光源可以投射阴影

// 聚光灯
const spotLight = new THREE.SpotLight( 0xffffff );
spotLight.position.set( 0, 200, 100 );
scene.add(spotLight)

浏览器显示效果如下
threejs 光线,ThreeJS,javascript,html5,3d
总结:Threejs提供了各种光源,各个光源的应用场景不尽相同,具体用法可以查阅官方文档。文章来源地址https://www.toymoban.com/news/detail-651426.html

到了这里,关于Threejs入门之四:Threejs中的光的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Three.JS教程5 threejs中的材质

    Three.js中的材质(Material)是实现引人注目的3D效果的关键组件之一。本篇博客中,我们将深入探讨Three.js中的材质类型、属性和用法。 在Three.js中,材质是应用于几何体(Geometry)的外观和纹理的规则。它们决定了对象在场景中如何反射光线、显示颜色、反射环境等。 Three.j

    2024年02月21日
    浏览(58)
  • Threejs入门之三:让物体跟随鼠标动起来

    上一节我们创建了一个三维的立方体,将其放在了浏览器窗口中,但是目前来讲它只是一个静态的图片,我们并不能通过鼠标控制其旋转、缩放和移动,这一节我们来实现用鼠标控制物体的运动。 首先我们要了解一个概念,在三维场景中,我们要控制物体旋转,实际上不是物

    2024年02月11日
    浏览(60)
  • Threejs入门之十八:GUI调试器的使用

    GUI是图形用户界面(Graphical User Interface)的简写,为了方便我们在编写代码时对相机、灯光等对象的参数进行实时调节,Threejs为我们提供了GUI库,使用它,可以快速创建控制三维场景的UI交互界面;threejs三维空间的很多参数都需要通过GUI的方式调试出来。这里我们仍然以上一节

    2024年02月09日
    浏览(38)
  • 【js&threeJS】入门three,并实现3D汽车展示厅,附带全码

    首先放个最终效果图:   三维(3D)概念: 三维(3D)是一个描述物体在三个空间坐标轴上的位置和形态的概念。相比于二维(2D)只有长度和宽度的平面,三维增加了高度或深度这一维度 在三维空间中,我们使用三个独立的坐标轴来描述物体的位置。通常使用笛卡尔坐标系

    2024年02月11日
    浏览(130)
  • Threejs 三维开发系列之Threejs基础概念

    Threejs简介 (是什么)Threejs是一个web端的3D图形引擎,能利用js创建和控制各种三维模型和场景 (能用来做什么)可以用js开发各种复杂的三维场景、空间模型动画展示、各种三维小游戏(比如微信跳一跳就是Threejs开发)。 (优势) 传统三维开发一般是c++ openGl,开发成本大效率低,th

    2024年02月08日
    浏览(39)
  • Threejs开发3D展馆 | 大帅老猿threejs特训

    本文将介绍如果使用Threejs开发制作一个3D展馆,效果如图:  首先,我们需要一个展馆模型。我是通过Blender做出来的,在Blender中将模型导出为glb格式。 接下来,我们通过代码将模型加载到网页中。 在3D图形开发中,最基本的概念就是场景、相机和光源。这三个是构成3D世界

    2024年02月11日
    浏览(39)
  • threejs实战数字孪生园区开源(threejs+vue3+vite)

    Hello大家好,我是日拱一卒的攻城师不浪,专注前端、后端、AI学习、2D3D、GIS等学习沉淀,这是2024年输出的第10/100篇文章,欢迎志同道合的朋友一起学习交流; 公众号:攻城师不浪 绿泡泡:brown_7778 threejs数字孪生园区 近两年, web3D 的势头逐渐兴起。 例如得物的 VR穿戴 ,贝

    2024年04月16日
    浏览(37)
  • 【ThreeJS基础教程-初识Threejs】1.6各种各样的几何体

    本段内容会写在0篇以外所有的,本人所编写的Threejs教程中 对,学习ThreeJS有捷径 当你有哪个函数不懂的时候,第一时间去翻一翻文档 当你有哪个效果不会做的时候,第一时间去翻一翻所有的案例,也许就能找到你想要的效果 最重要的一点,就是,绝对不要怕问问题,越怕找

    2024年02月08日
    浏览(48)
  • Threejs进阶之一:基于vite+vue3+threejs构建三维场景

    前面的章节我们都是通过HTML+JS的方式创建三维场景,从这一章节开始,我们后面将使用vite+vue3+threejs来构建三维场景。 打开vscode的终端管理器,输入如下命令 在弹出的选择框架提醒中,按上下键盘键,选择Vue,然后回车 选择JavaScript,回车 提示项目创建完成, 输入cd vue3-t

    2024年02月12日
    浏览(46)
  • ThreeJS 炫酷特效旋转多面体Web页 Demo 01《ThreeJS 炫酷特效制作》

    本案例为一个 threejs 的特效网页,大小球体进行包裹,外球体为透明材质,但是进行了线框渲染,使其能够通过外球踢查看其内球体。 注:案例参考源于互联网,在此做代码解释,侵删 本案例除 ThreeJS 外不适用任何第三方框架,放心食用 懒的同学可以直接下载代码,打赏作

    2024年02月08日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包