three.jsraycasting有多贵?

嘿,是固定尺寸的。这意味着BVH可能更有效地分割复杂的几何体。然而,我看到有人建议使用八叉树来划分由许多几何体组成的大型场景,比如说,太阳系,以及四叉树来划分主要是2D的大型场景,比如等距游戏关卡。然而,我没有足够的经验来评论这一点。
本文第5条探讨了BVH/octree之间的区别。从屏幕截图中可以看到,BVH最终的最终框更少。BVH八叉树
@gkjohnso
在这里有一个BVH实现:GitHubgkjohnson/three BVH 19
一个BVH实现,用于加速光线投射three.js网格。-gkjohnson/three-mesh-bvh
我不知道有好的八叉树实现。回购协议上曾经有一个,但几个月前由于未维护而被删除。
这是一篇有趣的文章。我不建议任何试图在他们的项目中使用空间索引的人去阅读它。它很可能不会回答你的问题,只会让你的头脑变得更复杂。
空间索引不同,它们的差异比这复杂得多。选择一个而不是另一个的含义也在很大程度上取决于您的实现。有一种方法可以实现0重叠的八叉树,有一种方法可以实现大量重叠的BVH。有很多方法可以使用更多的内存,有很多方法可以使用更少的内存,有很多方法可以快速构建树,有很多方法可以很好地构建树。变量太多了。
不过最后,如果你没有构建渲染引擎,那也没关系。您将看到,您的实现可能需要11微秒,而不是在特定查询上花费10微秒。如果一开始是500000微秒,你在乎吗?答案应该是“不”。
这是我的建议,作为一个走过这条路的人——不要担心,选择一些痛苦最少的东西加入你的项目。很有可能-你会对它完全满意。
谢谢你花了这么多时间,现在就很有意义了!
如果有人正在寻找针对three.js, 在大多数光线跟踪库中都有一个https://github.com/hoverinc/ray-tracing-renderer8或https://github.com/erichlof/THREE.js-PathTracing-Renderer11
我个人使用ammo.js用于光线投射,因为物理引擎已经有了空间索引。donmccurdy:
针对100个网格(每个网格有1K个顶点)进行光线投射这样会便宜得多,因为大多数网格将通过一个简单的边界框检查来消除。
您好,使用地球表示法,我确认对1440 x 1440 spherebuffer几何体进行光线投射大约需要1秒,这1440几何体甚至不足以获得地球上某个位置的精确位置。(构建此类几何体也需要0.5到1秒)。所以我也在寻找解决这个问题的方法。例如,将球体划分为每度4个顶点的几十个子球体(1440对应于4*360),然后再进行光线投射子球体。由于纹理平铺,我不得不进行此划分:三个不能平铺球体上的子纹理。
善意的问候,
光线投射不是正确的解决方案-如果对象的边界框与光线相交,那么光线投射器将在网格中的每个三角形上循环。如果你想知道光线与球体相交的位置,使用***3***8来获得相交坐标会快得多。
如果你需要一个特定的三角形,而不是特定的坐标,那么你可能需要某种空间数据结构来代替光线投射。donmccurdy:
如果你想知道的话当光线与球体相交时,使用***4***
会快得多谢谢,它看起来很好,所以我尝试了以下方法
效果很好但很慢(鼠标是标准化的,相机是正交的,地球是1440x1440个顶点的大网格):
函数mouseTogxgy(鼠标){
让gx,gy,x,y,gx2,gy2,x2,y2;nraycaster.setFromCamera(鼠标、照相机);
让>如果(相交长度){//点击地球,获取坐标)nbla bla okn//所以我在后面加了:nlet>console.log(“第2点:”);nconsole.log(第2点);
它为地球对象返回正确的值(但速度慢)
它为球体对象返回Na

有关主要对象是如何构建的更完整信息:
常量>让>
见鬼这个编辑器让我发疯了,我真诚地想正确地呈现这篇文章…
所以现在,你知道为什么会这样吗射线球面在点2中推动
an,同时其父光线投射器返回与网格地球相交的良好值?
提前感谢
您可能需要再次检查文档中的***5***。它返回一个向量3表示交叉点(如果没有找到交叉点,则为
ull),而不是Raycaster所做的交叉数组。np>Many thank,@donmcurdynp>Well语法是正确的,我只是没有正确地创建球体(调试显示半径为-1等)
解决方案只是像这样创建球体>/blockquote>n,而不是像这样>/blockquote>
我必须成为一个喜欢或讨厌方括号的人…
现在它可以以更好的精度完美地工作。您的帮助将使我进入一个更快的系统:不再需要创建1440*1440的三角形几何体,我将始终分离sowh部分(网格)和计算部分(数学)。
致以最诚挚的问候,ExtraMuros:
我必须成为一个喜欢或讨厌括号的人
意识到每次调用构造函数时,“括号”都会导致创建一个新的对象,因此这对垃圾收集器来说是额外的垃圾,垃圾收集器会在某个时候收集并导致FPS打嗝。对于库中潜在的性能关键部分,不使用“括号”,因此您编写的任何代码都是明智的选择。这里与语法首选项无关。
希望对您有所帮助。此外,文档应该是您首先检查的地方,然后是github和调试器上的源代码。遗憾的是,我们还没有到你可以写“绘制漂亮的图片pLx”并看到库产生预期结果的地步。
尽管如此,本讨论中的许多观点似乎偏离了轨道。如果您想要廉价的光线投射,您可能应该投资一个空间索引,这将大大简化您的用户端代码。试图在这里搞乱sphere,手动将您的模型分解为1000个片段相当于使用文本文件而不是数据库,逐行读取它而不是使用市场上众多SQL和其他类型的数据库。您只会带来bug和头痛,最终您的解决方案在性能方面可能也会比较差。
我一直主张在内部设置空间索引three.js在过去,在这一点上我并不在乎,因为这样做有明显的缺点,也有明显的好处。在我的engine 7中,我确实广泛使用了空间索引,如果没有空间索引,我所从事的项目将是不可能的。
关于边界球体的主题,我会注意到,在three.js如果被严重高估,则从边界框计算边界球体,这保证球体将被高估除非您的几何体实际上是一个轴对齐的长方体。我使用了另一种计算边界球体的机制,与使用创建的球体相比,边界球体的体积约为50%或更小three.jsn How expensive is raycasting?n

three.js[已解决]正交摄影机的变换控件:gizmos缩放问题

您好,我正在使用带轨道控制的正交摄影机。我注意到当缩放照相机变焦不改变相机的位置(如透视相机)。首先,我想知道为什么这两个相机的实现方式不同?第二,我也在使用TransformControls,对于透视摄影机,更新功能上的小控件的重新缩放在这个等式中非常有效>但是使用OrbitControls更改缩放而不是正交摄影机的位置时,它没有正常工作。我试着像这样在等式中添加缩放,但没有得到任何好的结果>我应该以不同的方式包括它吗?我应该使用其他控件吗?谢谢大家的帮助!NaDaMa:首先,我很想了解为什么这两个摄像头...

日期:2021-12-11 08:00:01 浏览:1782

three.js多次渲染同一模型(obj模型),FPS要低得多

我试图在程序中渲染150个相同的树模型,但FPS突然从60下降到30+。你能告诉我什么是最好的解决办法吗?非常感谢。和平与爱。skr有两种典型的方法可以解决这个性能问题(太多的绘制调用):- 使用实例化渲染- 将所有几何体合并为一个几何体(因此只有一个网格)...

日期:2021-12-11 08:00:02 浏览:1768

three.js可缩放场景背景

three.js大家好,我有一个场景,由一个物体(反射雕像)组成,保持在一个漂亮背景的中心。我一直在使用威尼斯日落矩形hdr地图作为我的场景背景它既可以作为环境地图,也可以作为背景我看到背景不会与场景中渲染的网格一起缩放。这给人一种场景完全是假的感觉。i、 e状态向上/向下缩放,但背景不缩放。目前,我已经禁用了放大/缩小功能,这样用户就不会感到害怕。我的问题是:1. 当轨道控制放大/缩小时,我是否需要在此处使用一些着色器魔法来放大或缩小场景背景,以便看起来场景中的所有对象都在均匀缩放?或者这根本不可能做到?...

日期:2021-12-11 09:00:02 浏览:1314

three.js移动导入的Gltf模型

three.js我导入了我的gltf模型并将其添加到场景中,但现在如果我尝试移动它,它将不会=新建三、几何();var=混音器( 模型动画[0]>如何移动模式?Prakar_Srivastava:var>3D对象不能是Geometry或BufferGeometry类型。它应该是Object3D或类似Mesh、Points或Line的派生类的实例。在您的情况下,我只是这样声明变量:var mode;在动画循环中,执行以下操作:如果(mod!==未定义)>还请记住,基本3D场景的重要部分在代码片段中丢失(例如相...

日期:2021-12-11 10:00:01 浏览:1143

three.js平面明暗处理的问题

three.js嗨!我在项目中使用节点材质。我在模型渲染方面有问题。它看起来像是真实的平面阴影。如何平滑多边形?也有点像低分辨率阴影纹理贴图的自阴影。可能不是,但可能是。@Arkadiy\\u Vinkovskiy您需要在您的帖子中添加更多细节。屏幕截图不足以说明这里发生了什么。始终包括引起问题的代码,如果您使用的是模型,也要包括这些代码。更好的是,使用codepe制作一个工作示例...

日期:2021-12-11 10:00:02 浏览:1011

three.js如何渲染立方体材质?

您好,直到昨天,我才相信Object3D是一组网格,而网格是一组几何体+材质,每个对象只有一个对象。我发现了立方体材质的结构,因此object3D的网格包含1个几何体(boxGeometry)和6个材质!所以问题是,这种网格的渲染效果如何?有关于它的文件吗?(这是为了提高我对three.js)非常感谢还有其他问题,与我的上一个帖子相关,如果一个网格中可能有多个材质,如何设置CustomDistanceMaterial以考虑所有材质的所有贴图?elysium11:所以问题是,渲染如何在这种类型的网格上工作?您...

日期:2021-12-11 11:00:03 浏览:878

three.js如何创建要在网格中拟合的线段

three.js伙计们,我想帮忙,假设我有一个这样的网格图像718×729 1.25 KB我想在网格面内创建线段,也就是说,我想将网格转换成这样的线图像710×828 740字节有人能帮忙吗???...

日期:2021-12-11 12:00:01 浏览:932

three.jsGLTFLoader.js这是我的登记簿错误

three.js每当我试着做决定的时候3.GLTFLoader对象我收到此错误代码:“未捕获类型错误:这是我的登记簿不是一个函数“我需要帮助!由Penta#u Trax在post#5中解决我最终发现我一直在使用错误的文件,当你需要使用jsm/example时,我使用的是js/example。其他东西也是个问题。但这是问题的基础。你能给我们看看你的代码吗?通常,如果你使用的是import语句,GLTFLoader不需要在前面加三个字符。好的,所以在这之前,我刚刚关注了这个视频,因为它是去年发布的。但是现在我试...

日期:2021-12-11 12:00:02 浏览:1095

three.js使用threejs的光流

嘿,我需要通过我的屏幕显示一束移动的光束。我不想使用任何模型或动画。我想知道我是否可以单独使用threejs来实现这一点。我也应该能够控制其运动的颜色强度和路径。嗨!也许这会有帮助:GitHub-jeromeetienne/三倍体积聚光灯: three.js扩展以提供体积聚光灯13,用于可视化光锥。您可以使用THREE.Curve()设置其路径。控制颜色强度,可能取决于曲线上的位置,也可以使用tween.js或者GSAP用于复杂的动画。创造力取决于您这是您想要的吗?https://threejs.org/e...

日期:2021-12-11 13:00:01 浏览:1350

three.js使用光线投射动态绘制多边形

我要画多边形three.js具有交点。为此,我使用下面的函数。首先,我使用光线投射器在第一个交点的第一个点添加球体。每次单击后,在交点处创建新球体,并在该交点和上一点之间创建线。现在,我希望在第一次单击时关闭多边形指向或单击该点周围。如何实现此目标。raycaster params是否与网格一起工作以检测鼠标位置周围的网格?function checkIntersectionclick() = raycaster.intersectObjects(addedObject, true);if (interse...

日期:2021-12-11 13:00:02 浏览:885