首页 > 其他分享 >Three光源Target位置改变光照方向不变的问题及解决方法

Three光源Target位置改变光照方向不变的问题及解决方法

时间:2024-01-03 14:03:12浏览次数:23  
标签:target 光源 Three 更新 目标 js 光照 Target

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 - SpotlightThree.js Documentation - DirectionalLight

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

结尾

最后,关注公号“ITMan彪叔”

标签:target,光源,Three,更新,目标,js,光照,Target
From: https://blog.51cto.com/u_15469248/9084396

相关文章

  • 初见threejs
    threejs底层封装了强大的webGL技术,让开发者们可以开箱即用(其实也并非开箱即用,还是挺麻烦的......
  • cocoaPod 执行 pod install 时出现警告:The `XX [Release]` target overrides the `CLA
    最近执行Podinstall安装命令时,控制台输出警告信息:[!]The`XXX[Debug]`targetoverridesthe`CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES`buildsettingdefinedin`Pods/TargetSupportFiles/Pods-XXX/Pods-XXX.debug.xcconfig'.Thiscanleadtop......
  • webpack概念(依赖图、target、manifest)
    依赖图(dependencygraph)依赖的东西可以是代码,也可以是非代码(images和web字体) 从 入口 开始,webpack会递归的构建一个 依赖关系图,这个依赖图包含着应用程序中所需的每个模块,然后将所有模块打包为少量的 bundle ——通常只有一个——可由浏览器加载。对于 HTTP/2 来......
  • debug跳转至 var4.getTargetException()
    今天敲了一个插入表的业务逻辑,发现控制台没有报错,但方法却没有执行完毕,debug后发现程序跳转到了该异常。经过上网搜索后有所了解,出现该异常的根本原因是当使用反射调用方法时,如果被调用的方法抛出了异常,而调用的方法却没有捕捉处理,那么该异常会被封装在一个`InvocationTargetEx......
  • apache HttpClient异常-ProtocolException: Target host is not specified
    昨夜,甘肃临夏州积石山县发生6.2级地震,影响到甘肃、青海地区。截至目前,已有100多人遇难。百度了一下当地天气,还挺冷,夜间温度低到-15℃。时间就是生命,祈祷难民尽快得到救援!  分享今天解决的一个生产问题告警。如下HTTP工具类中的httpClientPost方法使用apache的HttpClient(maven坐标......
  • VUE3 + Three.js 坑
    VUE3+Three.js坑1.问题描述将scene、camera、renderer、controls等变量用reactive变成响应式时,页面渲染会报错:three.module.js?5a89:24471UncaughtTypeError:'get'onproxy:property'modelViewMatrix'isaread-onlyandnon-configurabledatapropertyonthe......
  • Three光源Target位置改变光照方向不变的问题及解决方法
    0x00楔子在Three.js中,光源的目标(target)是一种用于指定光源方向的重要元素。在聚光灯中和定向光(DirectionalLight)中都有用到。有时我们可能会遇到光源目标位置更新后,但光照方向未正确更新的问题。这个问题并不复杂,但是有时候出现了,往往会想不到原因。0x01原因出现这个问题......
  • ThreeJS纯记录用
    缝合了ThreeJS,然后地图缝合了Cesium,缝的版本又老,不更新成新版本,功能比ThreeJS和Cesium都弱,想调用Cesium原生方法,嘿,没门,封死了。价格贵的要死。你咨询技术支持他首先就会问你买会员了没。SVIP一年一万,买了毛用没有,技术支持并不会因此变得专业,问就是刷新,问就是用Chrome,问就是清空缓......
  • D. Three Activities
    原题链接穷举,属于模拟题,不要害怕注意,判断三天互不相同时要判断三次:a!=b,b!=c,c!=a代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;structunit{llv;lld;};lla[100005]={0};llb[100005]={0};llc[100005]={0};intmain(){i......
  • apache HttpClient异常-ProtocolException: Target host is not specified
    昨夜,甘肃临夏州积石山县发生6.2级地震,影响到甘肃、青海地区。截至目前,已有100多人遇难。百度了一下当地天气,还挺冷,夜间温度低到-15℃。时间就是生命,祈祷难民尽快得到救援!  分享今天解决的一个生产问题告警。如下HTTP工具类中的httpClientPost方法使用apache的HttpClient(ma......