惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
博客园 - 聂微东
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
IT之家
IT之家
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
爱范儿
爱范儿
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
F
Fortinet All Blogs
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理

博客园 - ITman彪叔

赋能UE运行态编辑平台: 网络图片下载的插件改造与复盘 召回率暴涨!“层级化分片”与“降噪”拯救 RAG 系统 基于FastMCP打通业务系统与AI:构建智能协作新范式 在 Dify 中通过 MCP 集成本地 FastMCP 服务避坑指南 从分形到森林——使用 Three.js 创建逼真的 3D 树木 Threejs 视频融合 UE5 小部件 组合框(键)ComboBox (Key) Tesseract OCR 页面分割模式解析 Java MQTT 主流开发方案对比 Java Modbus主流开发方案对比 Java OPC UA 开发方案全对比:开源、商业、集成与官方标准 Nodejs打包 Webpack 中 __dirname 的正确配置与行为解析 强制 pnpm 使用 IPv4 而不是 IPv6 的终极解决方案指南 uniapp 微信小程序 调试 UE Websocket 通信 UE Geometry_Script 程序化建模 UE MultiLineTraceByChannel函数返回只有一个对象的问题 UE Spline 样条网格体组件添加碰撞 UE5 射线检测排除隐藏的Actor UE5打包SDK未正确安装的问题 判断两个矩形是否相交(Rect Intersection) 电力布局三维编辑器功能设计 UE4 WebUI使用指南2-通信
Three光源Target位置改变光照方向不变的问题及解决方法
ITman彪叔 · 2023-12-23 · via 博客园 - ITman彪叔

0x00 楔子

在 Three.js 中,光源的目标(target)是一种用于指定光源方向的重要元素。在聚光灯中和定向光(DirectionalLight)中都有用到。

有时我们可能会遇到光源目标位置更新后,但光照方向未正确更新的问题。 这个问题并不复杂,但是有时候出现了,往往会想不到原因。

0x01 原因

出现这个问题的原因其实就是ligt的目标对象(target) 没能更新他的相关矩阵数据,导致光源获取的总是老的数据。 没有更新的原因,最主要的原因是target 没有添加到场景中,导致three自动更新对象的矩阵数据的机制不能体现到target上。

0x02 解决方案

知道了原因,解决方案就简单了。就是让target的矩阵数据得到更新即可。下面是几种方案:

0x03 手动更新目标矩阵

在某些情况下,手动调用 updateMatrixWorld() 方法可能是必要的:

spotlight.target.updateMatrixWorld();

需要在每次渲染前都更新。

0x04 添加目标到场景

确保目标对象被正确添加到场景中,这样three自动更新对象的矩阵数据的机制能体现到target上:

if (spotlight.target) { 
    scene.add(spotlight.target); 
}

0x04 添加目标到光源

把光源的目标添加为光源的孩子,如下:

if (directionalLight.target) {
  directionalLight.add(directionalLight.target); 
}

需要注意的是,此时目标的位置设置,是相对于光源而不是世界坐标系了。

总结

通过以上步骤,你应该能够解决聚光灯和定向光中光源目标不更新的问题。详细检查你的代码并确保所有设置和属性都正确应用。希望这篇文章对你解决 Three.js 中的光源目标问题有所帮助。

参考连接

参考文档中其实有说明:
Three.js Documentation - Spotlight
Three.js Documentation - DirectionalLight

通过以上细致的解释和解决方案,希望你能够更好地理解和应对在 Three.js 中可能遇到的光源目标问题。

结尾

最后,关注公号“ITMan彪叔” 可以添加作者微信进行交流,及时收到更多有价值的文章。