问题标签 [marching-cubes]

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 投票
2 回答
610 浏览

c# - 我怎么能多边形化 bool[,,]

如果有人在乎,我正在使用 WPF ....

故事开始:

我得到了一系列灰度图像(模型的切片)。用户输入灰度值的“范围”来构建 3D 模型。因此,我创建了一个 3Dbool数组,以便更轻松地构建 3D 模型。该数组表示一盒像素,指示是否应构建/生成/填充每个像素。


领带:

使用 a bool[,,],我想检索 aList<Point3D[]>其中每个Point3D[]长度为 3 并表示 3D 空间中的三角形。


附加信息:

生成的模型将进行 3D 打印。在 中bool[,,]true表示存在物质,而false表示不存在物质。我需要避免使用立方体模型,其中每个像素都被一个立方体替换(根据我的目的,这将是无用的)。模型应尽可能平滑且尽可能准确。


我试图做的事情:

1-我实现了行进立方体算法,但似乎根本没有创建它来接受值的“范围”。

2-我一直在努力尝试制作自己的算法,但我部分失败了。(真的很复杂,如果您想了解更多,请告知)


一些我不知道如何实施的预期解决方案:

1- 修改 Marching cubes 算法以使其使用bool[,,]

2-修改行进立方体算法,以使其使用使用“范围”isolevel值的作品来工作

3- 展示如何在 WPF 中实现另一种适合我的目的的算法(也许是光线投射算法)。

4-请求我尝试实现的算法的源代码,然后向我展示如何解决它。(它首先是为了将 a 多边形bool[,,]化)

5-其他一些神奇的解决方案。

提前致谢。


编辑:

通过说

使用 a bool[,,],我想检索 aList<Point3D[]>其中每个Point3D[]长度为 3 并表示 3D 空间中的三角形。

我的意思是我想检索一组三角形。每个三角形应表示为 3Point3D秒。如果您不知道 aPoint3D是什么,它是一个struct包含 3 个双精度数(X、Y 和 Z)的 a,用于表示 3D 空间中的位置。

行进立方体算法的问题在于它有点模糊。我的意思是,你这样做是怎么理解的??

因此,我根本不知道从哪里开始修改它。


另一个编辑:

在对行进立方体算法进行了一些试验后,我注意到多边形化 abool[,,]不会产生我期待的平滑 3D 模型,所以我的第一个预期解决方案和我的第四个预期解决方案都没有发挥作用。经过大量研究,我知道了体绘制的Ray-Casting方法。它看起来很酷,但我不确定它是否符合我的需求。尽管我知道它是如何工作的,但我无法真正理解它是如何实现的。


再编辑: TriTable.LookupTable这里EdgeTable.LookupTable有表格

这是MarchingCubes课程:

这是GridCell课程:

好的,这就是我正在做的事情:

我是从 Stack-Overflow 做的,所以请指出任何错别字。这是有效的,这会产生一个模型的外壳。我想做的是用 2 个整数替换函数isolevel中的变量:和. 不仅是 1 ,而且是一个范围。PolygoniseisolevelMinisolevelMaxint


编辑: 伙计们,请帮忙。50 次代表几乎是我声誉的 1/2。我希望我能改变我的期望。现在我只想知道如何实现我想要的,任何关于如何实现的片段,或者如果有人给出一些我可以用谷歌搜索的关键字,我用来解决我的问题,他会得到代表。我只需要一些光——这里很黑。


编辑很棒: 经过越来越多的研究,我发现体积光线行进算法实际上并没有生成表面。由于我需要打印生成的 3D 模型,所以我现在只有一种方法。我必须让行进立方体算法从最大和最小等值线值生成一个空心模型。

0 投票
1 回答
262 浏览

matlab - Kinect Fusion 的行进立方体 - 阴影效果

我正在使用 Kinect Fusion,在获得 TSDF 体积 (450x450x150) 后,我应用了行进立方体(MATLAB 中的等值面)来显示 3D 网格。但是,我得到的是如图所示。它在物体后面有长长的阴影。那么你能告诉我我的实现有什么问题吗?

https://i.stack.imgur.com/onaFX.png)非常感谢。

0 投票
2 回答
226 浏览

algorithm - 行进立方体,按位与和或

为了理解行进立方体算法,我关注了这个页面: http: //paulbourke.net/geometry/polygonise/

我有一些问题:按位 & 和 | 做什么 是什么意思?,以及他们将如何使用边缘表找到正确的三角形?

  • if (grid.val[0] < isolevel) cubeindex |= 1;

  • if (edgeTable[cubeindex] & 1) vertlist[0] = VertexInterp(isolevel,grid.p[0],grid.p[1],grid.val[0],grid.val[1]);

0 投票
1 回答
586 浏览

c++ - 行进立方体重建 - 向量下标超出范围

我正在尝试使用在 PCL 中实现的 Marching Cubes 算法从点云生成网格。我正在将https://github.com/atduskgreg/pcl-marching-squares-example/blob/master/marching_cubes.cpp中给出的代码改编为我的点云(我的代码如下所示)。Visual Studio 2015 成功构建,但是当我运行它时,我收到有关调试断言失败的错误消息。表达式是“向量下标超出范围”。你能帮我解决这个错误信息吗?我的另一个问题是,如果我可以成功生成多边形网格,我如何以 .obj、.ply 或 .wrl 格式导出它?我期待着收到您的来信

0 投票
1 回答
104 浏览

matlab - Meshgrid matlab 中的索引

我被困在这里很久了。请帮我。

对于以下代码:

原始“I”尺寸为 217x181x181

[nX,nY,nZ] = 大小(I);

[X,Y,Z] = 网格(1:nX,1:nY,1:nZ);

Meshgrid X、Y、Z 之后的尺寸为 181x217x181

现在从“I”如何在 C 矩阵中找到值,使得 X、Y、Z 的维度与 C 的维度匹配。

0 投票
1 回答
889 浏览

c++ - 带有VTK的厚表面

我正在尝试从地面激光扫描仪获得的点云生成三角形网格。我使用VTK库的行进立方体算法。当我将生成的网格可视化时,它看起来像一个厚表面,如下图所示:

在此处输入图像描述

但是,我期望看到它如下图所示:

在此处输入图像描述

你能帮我解决这个问题吗?我想生成网格,如第二个图所示。我期待着您的回音

顺便说一句,我的代码是:

0 投票
3 回答
4917 浏览

triangulation - 行进立方体三角表是如何生成的?

行进立方体三角表是如何生成的?我知道,我可以只使用预先计算的一个,但我对如何生成表格很感兴趣。

似乎原始作者通过对纸上的所有内容进行三角测量来生成它,但是有没有一种方法可以在代码中生成它?

边缘表是直截了当的,但我看不到是否有一种简单的方法可以获得三角形表,即使忽略不明确的情况也是如此。

0 投票
0 回答
1848 浏览

c# - 行进立方体在网格中生成孔

我正在 Unity 中实现 Marching Cubes。我的代码基于 Paul Bourke 的代码,实际上进行了很多修改,但无论如何,我正在检查某个位置的块是否为空,如果它是,则将在其上放置调试纹理。

这是问题的图像

这是我的 MC 脚本

我没有将表格放入示例中,因为它们与 Bourke 代码中的表格相同。

编辑:我发现蓝色三角形处的单元格值为 0,因此不必对它们进行三角剖分,但它们下方的单元格值为 1,因此创建了一个顶部三角形来完成网格。

0 投票
2 回答
1112 浏览

3d - 稀疏体素八叉树平滑网格化

我一直在我们的 God Google 上进行了几次搜索,但没有找到任何文章以直观的方式解释以下问题:

我知道八叉树在理论上是如何工作的(“还没有”实现过)。我想要的是一种算法方法,如何获取节点数据,并生成平滑的、基于三角形的网格,就像 Marching Cubes 所做的那样(我什至不知道八叉树是否使用行进立方体......)。

基本上,我想知道如何将多个“立方体”尺度的顶点连接在一起。

在类似 Minecraft 的空间(地球是平的)中,对于 Marching Cubes,这很容易做到,因为它认为所有立方体大小相同,但在八叉树中,子节点的大小是其父节点的一半。我怎样才能对这些不同的立方体进行网格划分?

任何解释/链接/任何将不胜感激!

0 投票
1 回答
162 浏览

python - 是否有任何快速算法可以找到图形的最大外轮廓?

我有一个在此处输入图像描述从 scipy.measure.label 获得的标记矩阵。现在对于每个特征,我需要获得它的外轮廓。我尝试了 cv2.findContours 但它发现的轮廓与标签不符。我认为应该有一个简单的算法来做到这一点,但不幸的是,找不到。