threejs系列:光源与光照🪀

写在最前

光照是计算机图形学中的一个重要概念,它可以用来模拟现实世界中的光线效果。光照的效果可以影响图形的视觉效果,使其更加逼真和真实。

图形学光照的研究主要集中在以下几个方面:

  • 光源模型:光源模型是用于描述光源的物理模型。常见的光源模型包括点光源模型、聚光灯模型、平行光源模型和环境光源模型。
  • 光照模型:光照模型是用于描述光线与物体相互作用的模型。常见的光照模型包括漫反射模型、镜面反射模型、折射模型和材质模型。
  • 光照算法:光照算法是用于计算光照效果的算法。常见的光照算法包括直接光照算法、间接光照算法和全局光照算法。

光源模型

THREE.AmbientLight 环境光

环境光源是没有原点,没有方向的光源,它公平的给予场景中的每一个物体相同的光亮,也称为全局光照。

假设颜色为 meshColor 的物体不受其他因素影响,且设置光源强度为1,颜色为lightColor的环境光,则物体最终渲染的颜色值为 meshColor * lightColor

js 复制代码
  let light = new AmbientLight(0xFF0000, 1);

  let cube = new Mesh(
    new BoxGeometry(1, 1, 1),
    new MeshStandardMaterial({ color: 0xCCCCCC })
  );

  console.log(new Color(0xFF0000).multiply(new Color(0xCCCCCC)).getHexString());

(可以用吸色盘查看颜色是否和打印的值一样)

THREE.PointLight 点光源

从一个点向各个方向发射的光源,现实生活中例子:灯泡、萤火虫等。

  • color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
  • intensity -(可选)光照强度。默认值为 1。
  • distance - 光源照射的最大距离。默认值为 0(无限远)。
  • decay - 沿着光照距离的衰退量。默认值为 2。

定位定光的辅助对象 THREE.PointLightHelper

js 复制代码
const pointLightHelper = new THREE.PointLightHelper(pointLight);
scene.add(pointLightHelper);

THREE.SpotLight 聚光灯

光线从一个点沿一个方向射出,随着光线照射的变远,光线圆锥体的尺寸也逐渐增大。现实生活中:手电筒

  • color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
  • intensity -(可选)光照强度。默认值为 1。
  • distance - 光源照射的最大距离。默认值为 0(无限远)。
  • angle - 光线照射范围的角度。默认值为 Math.PI/3。
  • penumbra - 聚光锥的半影衰减百分比。默认值为 0。
  • decay - 沿着光照距离的衰减量。默认值为 2。

定位定光的辅助对象 THREE.SpotLightHelper

js 复制代码
const spotLightHelper = new THREE.SpotLightHelper(spotLight);
scene.add(spotLightHelper);

THREEJS.DirectionalLight 平行光

从某个角度发出平行且恒定的光强,常用于模拟太阳光。

  • color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
  • intensity -(可选)光照的强度。默认值为 1。

定位定光的辅助对象 THREE.DirectionalLightHelper

js 复制代码
const helper = new THREE.DirectionalLightHelper( light, 5 ); 
scene.add( helper );
相关推荐
国科安芯10 小时前
航天电子模拟前端三大支柱:精密运放、高速运放与电压监控的协同设计方法——ASL8522S/ASL622S/ASL706S技术解析
前端·单片机·嵌入式硬件·fpga开发·架构·安全性测试
神明不懂浪漫11 小时前
【第四章】CSS(二)——文本外观属性与复合选择器
前端·css·经验分享·笔记
kyriewen11 小时前
别再用AI debug了——这5种bug越修越烂
前端·javascript·ai编程
星释12 小时前
鸿蒙智能体开发实战:39.鸿蒙壁纸大师 - 前端卡片显示与交互优化
前端·华为·交互·harmonyos·鸿蒙·火山引擎
顾昂_13 小时前
内存泄漏排查和 Chrome DevTools 使用教程
前端·javascript·面试
IT_陈寒14 小时前
Java线程池这个坑我算是踩明白了
前端·人工智能·后端
315356691314 小时前
Superpowers:GPT-5.6 时代下的流程毒瘤
前端·后端
清秋15 小时前
全网最全 ECMAScript 攻略( 更新至 ES2026)
前端·javascript·编程语言
Cao_Ron15 小时前
用 SVG image symbol 画 ECharts graph 圆形节点
前端
hxy060115 小时前
React-Call让你的React组件像异步函数一样调用
前端·react.js