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 );
相关推荐
一路向北North12 分钟前
网页版预编译SQL转换工具
前端·javascript·sql
拿不拿铁191 小时前
Vite 5.x 开发模式启动流程分析
前端
fruge1 小时前
设计稿还原技巧:解决间距、阴影、字体适配的细节问题
前端·css
BBB努力学习程序设计2 小时前
了解响应式Web设计:viewport网页可视区域
前端·html
zhangyao9403302 小时前
uni-app scroll-view特定情况下运用
前端·javascript·uni-app
码农张2 小时前
从原理到实践,吃透 Lit 响应式系统的核心逻辑
前端
jump6802 小时前
object和map 和 WeakMap 的区别
前端
打小就很皮...2 小时前
基于 Dify 实现 AI 流式对话:组件设计思路(React)
前端·react.js·dify·流式对话
这个昵称也不能用吗?2 小时前
【安卓 - 小组件 - app进程与桌面进程】
前端
kuilaurence2 小时前
CSS `border-image` 给文字加可拉伸边框
前端·css