图形化开发(五)032-Three.js之光照——PointLight 点光源、SpotLight 聚光灯光源、实现聚光灯阴影、HemisphereLight室外光源

PointLight 点光源

点光源就是从一个点的位置向四面八方发射出去光,一个简单的例子就是一个裸露的灯泡。
实现一个最普通的点光源很简单:

var pointLight = new THREE.PointLight(0xff0000); //创建一个白色的点光源
pointLight.position.set( 50, 50, 50 );
scene.add( pointLight );

点光源支持四个参数配置,除了前两个颜色和光的强度外,另外两个是照射范围和衰减度:

var pointLight = new THREE.PointLight(0xff0000, 1, 100, 2); //创建一个白色的点光源
pointLight.position.set( 50, 50, 50 );
scene.add( pointLight );

第三个参数照射范围,如果物体距离点光源超过这个距离,将不会受到点光源的影响,默认是所有的物体会受到点光源的影响。如果设置了参数,将按照第四个参数,衰减度的值来慢慢减少影响,默认是1,如果需要模拟现实中的效果,这个参数可以设置为2。

这些属性也可以通过动态修改:

pointLight.color.set(0x000000); //修改光照颜色
pointLight.intensity = 0.5; //修改光的强度
pointLight.distance = 50; //修改光的照射范围
pointLight.decay = 1.0; //修改衰减度

实现点光源阴影效果和实现平行光的阴影效果的设置基本一样,而且由于点光源是散射,阴影效果会终止在点光源的影响范围内。我们可以仿照平行光的阴影实现过程进行实现,只是将平行光修改为了点光源:

pointLight = new THREE.PointLight("#ffffff");
pointLight.position.set(40, 60, 10);//告诉平行光需要开启阴影投射
pointLight.castShadow = true;scene.add(pointLight);
SpotLight 聚光灯光源

聚光灯光源的效果也是从一个点发出光线,然后沿着一个一个圆锥体进行照射,可以模仿手电筒,带有灯罩的灯泡等效果。
实现聚光灯的案例最简单是直接设置一个颜色即可,默认照射原点位置的光照:

var spotLight = new THREE.SpotLight( 0xffffff ); //创建一个白色光照
spotLight.position.set( 100, 1000, 100 );
scene.add( spotLight );

聚光灯光源和点光源一样,也可以设置光的强度和照射范围

spotLight = new THREE.SpotLight( 0xffffff, 2.0, 100); //设置光照强度是默认的两倍,照射范围为100

聚光灯由于是沿圆锥体照射,我们可以设置聚光灯的这个椎体的角度来影响:

spotLight = new THREE.SpotLight( 0xffffff, 2.0, 100, Math.PI/4); //设置光的照射圆锥范围为90度

因为聚光灯只能照射一定的区域的物体,所以会出现光亮和无法照射地方的交接,我们可以通过配置第五个值来设置交接渐变的过渡效果:

spotLight = new THREE.SpotLight( 0xffffff, 2.0, 100, Math.PI/4, 0.5); //设置交界过渡幅度为0.5,默认是0,没有过渡,最大值为1

我们也可以通过设置第六个值来设置聚光灯的衰减度,和点光源一样:

spotLight = new THREE.SpotLight( 0xffffff, 2.0, 100, Math.PI/4, 0.5, 2.0); // 设置衰减度为物理效果的值2.0

同样道理,我们也可以动态修改相关配置项:

spotLight.color.set(0x000000); //修改光照颜色
spotLight.intensity = 0.5; //修改光的强度
spotLight.distance = 50; //修改光的照射范围
spotLight.angle = Math.PI/3; //修改光的照射弧度
spotLight.penumbra = 1.0; //修改交界过渡
spotLight.decay = 1.0; //修改衰减度

我们也可以修改聚光灯的target来修改光的照射方向:

spotLight.target.set(0, 1, 1); //修改照射方向
实现聚光灯阴影

实现聚光灯阴影和实现平行光和点光源的设置一样,聚光灯的设置也是将可以生成阴影设置打开,并将聚光灯添加到场景中即可:

spotLight= new THREE.SpotLight("#ffffff");
spotLight.position.set(40, 60, 10);
//告诉平行光需要开启阴影投射
spotLight.castShadow = true;
scene.add(spotLight);
HemisphereLight室外光源

最后我们说一下室外光源,这个光源主要是为了模拟在户外的环境光效果,比如在蓝天绿地的户外,模型下面会显示出来绿色的环境光,而上方则会受到蓝天的影响而颜色偏蓝。
实例化室外光源支持三个参数:天空的颜色,地面的颜色,和光的强度。

//添加户外光源
var hemisphereLight = new THREE.HemisphereLight(0xffffbb, 0x080820, 1);
scene.add(hemisphereLight);

同样的道理,我们也可以通过配置属性实时修改:

hemisphereLight.color.set(0xffffff); //将天空颜色修改为白色
hemisphereLight.groundColor.set(0x000000); //将地面颜色修改为黑色

我们也可以修改position配置项来修改渲染的方向:

hemisphereLight.position.set(0, -1, 0); //默认从上往下渲染,也就是天空在上方,当前修改为了,天空颜色从下往上渲染

图形化开发(五)032-Three.js之光照——PointLight 点光源、SpotLight 聚光灯光源、实现聚光灯阴影、HemisphereLight室外光源相关推荐

  1. 图形化开发(五)021-Three.js之材质——不受光影响-MeshBasicMaterial-同颜色MeshNormalMaterial-方向不同颜色LineBasicMaterial线条材质

    图形化开发(五)021-Three.js之材质--不受光影响-MeshBasicMaterial-整个物体颜色一样&MeshNormalMaterial-方向不同自动改变颜色 & Li ...

  2. 图形化开发(五)022-Three.js之材质——受光影响-MeshLambertMaterial 兰伯特材质 MeshPhongMaterial 高光材质

    图形化开发(五)022-Three.js之材质--受光影响-MeshLambertMaterial 兰伯特材质 & MeshPhongMaterial 高光材质 添加光 由于MeshBasic ...

  3. 图形化开发(一)——Three.js基本介绍-优缺点-在线编辑器 Babylon.JS是最好的JavaScript3D游戏引擎

    图形化开发(一)--Three.js基本介绍-优缺点-在线编辑器 & Babylon.JS是最好的JavaScript3D游戏引擎 课程主要学习目标 Threejs ( 3d ) D3 (做数 ...

  4. 图形化开发(六)01-Three.js之导入模型——3dmax和SketchUp-editor编辑器导出json文件,在创建模型initMesh中外部的JSON文件

    图形化开发(六)01-Three.js之导入模型--3dmax和SketchUp-editor编辑器导出json文件,在创建模型initMesh中外部的JSON文件 导入模型 官方推荐我们使用的3D模 ...

  5. 图形化开发(一)——D3.js的基本介绍、技术原理

    图形化开发(一)--D3.js的基本介绍.技术原理 D3.js 为什么学习D3 中文官网--https://www.d3js.org.cn/ github--https://github.com/d3 ...

  6. Arduino的图形化开发环境: ArduBlock

    转载自http://youngmakers.cn/groups/articles/54f9466b9835fed6656d4dd6 ArduBlock是一款为Arduino设计的开源图形化编程软件,由 ...

  7. 【MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式

    目录 系统时钟概述 BCS+模块单元的基本构造 时钟-概览 介绍 Basic User 模式 Power User 模式 1. 数控振荡器 DCO 2. 出厂预校正频率 3. 低频振荡器 VLO 4. ...

  8. python 图形化开发用什么模块_用python进行GUI开发的选择/python的GUI模块(图形界面开发库)...

    Python最大的特点就在于她的快速开发功能.作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域.这里我简单介绍一下用python进行gui开发的一些选择. 1.Tkinter T ...

  9. pyqt5 不报错退出_最新版本Python图形化开发环境Anaconda(Python3.7) +PyQT5+Eric6

    Anaconda是完全免费的企业级的Python发行大规模数据处理.预测分析和科学计算工具.Anacoda是Python科学技术包的合集,所以不同的包所遵循的协议不一样.PyQt5与Eric6是众所周 ...

  10. 微信小程序开发(五) - 全局(app.js)逻辑 - js 文件

    微信小程序中使用的逻辑文件 ,本质上还是.js 文件,脚本中的很多东西进行了二次封装,本质上可以在外部调试中,查看 逻辑层(App Service) 小程序开发框架的逻辑层由 JavaScript 编 ...

最新文章

  1. TCP性能和发送接收Buffer的关系
  2. PHPcms 系统简单使用
  3. Qt中利用QProcess调用外部cmd.exe执行程序
  4. torch.nn.Parameter()
  5. 使用PowerShell和T-SQL在多服务器环境中规划SQL Server备份和还原策略
  6. Abaqus二次开发的一些自制脚本
  7. 如果微软开发了 Android,会有何不同?
  8. jqgrid for asp.net 遍历所有列rowObject时不用输入编号
  9. LeetCode - 9. 回文数
  10. 【2(2N+1)魔方阵 】
  11. 苹果mac好用的记事本软件:Ulysses 24
  12. 15.go install
  13. UICollectionViewCell 所遇到的问题
  14. Linux内核那些事之连接跟踪
  15. 设置a标签下载文件的文件名
  16. MyEclipse10破解
  17. 怎么把两个PDF合并成一个?建议收藏这些合并的方法
  18. CentOS7-命令-查看操作历史记录(history)
  19. h5 字体加粗_div css布局对文字字体加粗样式设置
  20. 【PCB专题】什么是通孔、盲孔、埋孔?

热门文章

  1. python3两个三阶矩阵相乘_矩阵相乘的实现-python
  2. Ubuntu安装deb包
  3. 禅道服务器修改ip,访问禅道服务器的ip地址
  4. 网易云评论 爬虫 java_网易云歌曲评论爬虫如何实现翻页?
  5. 旋转Kubernetes中的秘密
  6. Mybatis 批量更新运行异常,数据库 postgres
  7. Spring Bean生命周期(简单易懂)
  8. 低代码快速对接淘宝订单数据(超详细教程)
  9. mess组网 中继_想全屋覆盖还用中继器?out啦!Mesh组网才是最佳方案
  10. spring boot启动报错:Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase