问题标签 [bounding-volume]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6914 浏览

c++ - 在计算边界球半径时遇到一点问题

我已经设法以两种方式计算了边界球半径,但没有一个能准确地给我我想要的。我不需要一个“像素”完美的边界球,但我想要比我目前拥有的更好的东西。

我正在使用 Wavefront .obj 模型并计算这些模型的边界球半径,我提取了当前模型尺寸(我使用的是 Nate Robbins 的 GLM 库),这将为我提供每个轴上的尺寸。

第一种方法: 将每个轴除以 2,这将给我每个轴上的半径。最大的是我将用于我的边界球的那个。这适用于我的项目特定的大多数对象。它对某些人不起作用,例如立方体形状的。基本上,如果我有一个立方体并用这种方法计算半径,球体会将立方体角留在外面。

第二种方法: 将每个轴除以 2,这将给我每个轴上的半径。然后我这样做是为了取出边界球的半径:

但这给了我一个相当大的半径。对象将完全封闭在球体中,但球体非常大,超出了应有的范围。

我不明白我在上面的公式中做错了什么,据我所知,它应该可以工作。但我显然错了...

0 投票
2 回答
386 浏览

algorithm - 体积内的对象

我有一个问题,我需要一种非常有效的方法来查找给定体积内的对象。可以想象,对象被表示为具有 X-min、Y-min、Z-min 和 X-max、Y-max、Z-max 值的框。太空中可能有数百万个这样的对象,问题是在任意给定的用户提供的体积内找到对象。用户输入框的 X、Y 和 Z 值的最小值、最大值。

目前,我在 Oracle 数据库表中拥有所有这些对象,这些对象为 X、Y 和 Z 值的范围索引。任何查找对象的查询都涉及将给定的 X、Y 和 Z 值与对象值的比较。我发现性能并不令人满意,并且正在考虑使用内存算法来解决这个问题。此外,还需要找到完全进入、部分进入的对象。

谢谢艾

0 投票
1 回答
695 浏览

collision-detection - BVH 碰撞遍历算法不在每个后代中查找

我正在查看来自Game Physics Engine Development的 BVH 遍历算法的代码,特别是在文件末尾。getPotentialContactsgetPotentialContactsWith

从这个算法的外观来看,它会比较一对初始的兄弟姐妹,但它不会在每个后代中寻找冲突。

我看不出这在像这样的图上是如何工作的,其中虚线表示分支,实线表示叶节点,树的深度由光谱颜色(红色、橙色、黄色、绿色)表示:

BVH问题

我在这里不明白的是什么?我是否需要另一种算法来查找树中的所有联系人?

我还尝试遍历每个叶子,但在许多情况下我最终检测到两次碰撞 - 所以也不是这样。

0 投票
1 回答
399 浏览

collision-detection - 最小的封闭球体 - 从 OBB 派生?

我需要计算 3D 中一组点的最小封闭球体,它已经被定向边界框 (OBB) 包围。

我的假设是否正确,即球体可以从 OBB 派生如下?

如果不,

  • 为什么?
  • OBB可以用吗?
0 投票
2 回答
2467 浏览

raytracing - 如何在包围体层次结构中进行排序和比较

我目前正在为 3D-Triangles 实施边界体积层次结构。可悲的是,所有对 BVH 的解释都未能体现在您对对象进行分类以进行拆分的部分。对于初学者,我想以平衡树为目标并使用中位数切割。这将要求我在当前节点的拆分轴上的空间标准之后对三角形或其边界框(AABB)进行排序。我真的不确定BB或三角形的最大或最小延伸是否足以进行适当的分离,因为某些三角形可能更大。我也不确定比较边界框还是三角形更好。

问题的第二部分是对每一步进行排序似乎很昂贵。计算机图形学中的其他算法使用预先排序的列表,然后根据拆分标准拆分这些列表。我看不出如何有效地比较三角形并确保它们属于一个列表。这是否意味着我必须每一步都对列表进行排序?

0 投票
2 回答
647 浏览

c++ - 与向量关联的 NULL 指针

在我的光线追踪器中,我正在构建一个包围体层次结构。我已经用了几天试图修复这个错误,但我似乎在做一些根本错误的事情。

第一种方法是被调用的构造,下面是使用 typedef std::vector Objects 数组的构造。

下面的方法使用此方法来构造我的二叉树中的叶节点。

这是一种递归方法,使用对象数组来拆分和构造节点和叶节点。

运行此代码会给我细分内的分段错误。

这是来自 gdb 的空指针的帖子:

0 投票
0 回答
1033 浏览

opengl - OpenGL,延迟着色,点光和模板通道的边界体积,光衰减

目前我正在尝试在我的引擎中实现延迟着色。我主要基于在网络上创建的一个教程(由于链接限制,我没有在此处粘贴链接:))但我也使用其他来源,并且我知道延迟着色的工作原理。我当前的实现基于计算所有灯光类型的全屏四边形上的灯光。为了获得更快的速度,我想将边界球用于带有模板通道的点光,但我有一些问题。

第一个也是最大的一个是当我希望在光通道中渲染球体以仅计算受光影响的像素。当我在模板通道中绘制球体,然后在全屏四边形上计算光时,我认为一切正常(我只有错误的球体大小,但它仅用于测试)

但是当我试图在模板通道中使用的同一个球体上渲染它时,我得到了奇怪的结果,这可能是由于纹理坐标造成的。当我不使用它们时,我的一切都是黑色的。当我使用它们时,我得到了这个

在教程中,我看到人们只渲染仅包含顶点位置的球体,一切正常,所以我不知道出了什么问题。

我还必须对教程中提供的代码进行一些更改

而且我也想知道为什么当我在球外时,这种变化会帮助我解决另一个问题(我相信你知道问题是什么,我不需要解释它)。

我想问你的最后一个问题是,仅基于光功率(即浮点数)计算球体大小和光衰减的最佳公式是什么?

0 投票
0 回答
104 浏览

collision-detection - 如何放置一个对象,使其不会在 jMonkey 中碰到我场景的墙壁

在我的游戏中,用户必须单击某个点才能放置对象(网格)。我可以投射光线并找到可以平移对象的水平点,然后将其附加到 rootNode 以显示它。然而问题是,如果用户点击太靠近另一个对象/场景墙,则要放置的对象会碰到它。我怎样才能防止它?

0 投票
0 回答
1155 浏览

c++ - Bounding Volume Hierarchy 光线遍历问题

我已经成功实施了 PBRT 中描述的 BVH。这个虽然有一个稍微大的问题 - 遍历查看与射线相交的所有节点,这是错误的(就性能而言)。

所以我最终优化了光线遍历,目前我使用 Aila & Laine 实现的版本,他们的“Understanding theefficient of ray traveral on GPU”。首先,这里是代码:

从技术上讲,它只是一个标准的 while-while 堆栈 ray-bvh 遍历。现在到主要问题,看下一张图片(从外面查看 sponza),颜色可以看到 BVH 中的节点已被访问过多少(全红色 = 100,全黄色 = 1100): Sponza BVH

下一张图片显示了类似的情况: Sponza BVH

正如你所看到的,这是一个问题——它只需要遍历比预期更多的节点。有人能看出我的代码有问题吗?欢迎任何建议,因为我已经坚持了几天并且想不出一些解决方案。

0 投票
1 回答
576 浏览

algorithm - BVH 的线性化和 SAH 的桶数是什么意思?

我正在研究 CUDA 光线追踪器并对其进行一些研究工作,但我无法找到几个重要问题的答案:

  1. 在光线追踪期间线性化 BVH 的目的是什么?和
  2. SAH(表面积启发式)分箱的存储桶计数是什么意思...
  3. 通过图元的质心进行分箱是什么意思?