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

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

时间:2023-12-23 13:22:56浏览次数:35  
标签: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 - Spotlight
Three.js Documentation - DirectionalLight

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

结尾

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

标签:target,光源,Three,更新,目标,js,光照,Target
From: https://www.cnblogs.com/flyfox1982/p/17923016.html

相关文章

  • 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......
  • three.js3D地图省市下钻加上钻踩坑记录(未完待续)
     1,three安装失败首先脚手架种安装three,我不知道是网络问题还是什么,three我总是安装不上,于是我就下载了网上别的博主得成品代码,把里面de包拿出来放在我自己项目中安装包链接在此,如有需要自取,https://files.cnblogs.com/files/jickma/three.rar?t=1702967875&download=true......
  • UE5打包出现ERROR: Client target not found
    由于需要测试Client连接DS来测试联机同步逻辑,所以需要打个Client的包出来,但是在我设置好Client的打包设置然后运行时,出现了ERROR:Clienttargetnotfound最后找UE官方论坛下的一个帖子:https://forums.unrealengine.com/t/unrealfrontend-client-target-not-found/103129原来......
  • Predicting Drug-Target Interactions. drug-target interactions prediction
    2023[j22]JunjunZhang, MinzhuXie:Graphregularizednon-negativematrixfactorizationwithL2,1 normregularizationtermsfordrug-targetinteractionsprediction. BMCBioinform. 24(1): 375 (2023)2022[j21]JunjunZhan......
  • Threejs利用着色器编写动态飞线特效
    一、导语动态飞线特效是可视化数据地图中常见的需求之一,鼠标点击的区块作为终点,从其他区块飞线至点击区块,附带颜色变换或者结合粒子动画二、分析利用创建3点来构成贝塞尔曲线,形成线段利用着色器材质来按照线段以及时间点变化来变化线段的颜色形成动画三、上基础代码//贝塞尔曲线......
  • Threejs漫天多彩粒子天空--粒子系统打造
    一、导语漫天多彩粒子天空特效应该也是Threejs项目中挺常见的一个需求,因为它是基于粒子系统,可以衍生出许多的不一样的方案,比如,星空特效,下雨特效,飘雪特效等等,不仅可以用在项目中增加氛围,有时候可以结合gis业务去使用二、分析利用Points粒子特效去实现多个物体的生成使用贴图去给粒子......
  • UBUNTU 18.04.6编译linux内核make ARCH=arm menuconfig提示recipe for target ‘menuc
    UBUNTU18.04.6编译linux内核makeARCH=armmenuconfig提示recipefortarget‘menuconfig’failed:这是因为没有安装图形化Kernel配置工具。要么安装libncurses5-dev库,要么安装libncurses-dev这是因为没有安装图形化Kernel配置工具。要么安装libncurses5-dev库,要么安......
  • three.js 3d模型使用|vue项目使用three.js
    three.js3D模型使用安装安装three.jsnpminstallthree安装轨道控件插件npminstallthree-orbit-controls安装加载.obj和.mtl文件的插件npminstall--savethree-obj-mtl-loader安装渲染器插件npminstall--savethree-css2drender导入import*asThreefrom......