问题标签 [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 投票
3 回答
1228 浏览

c++ - 行进立方体,非常小的三角形

所以我正在尝试使用行进立方体算法生成地形。此时我正在实现漫反射照明(片段着色器)。我计算了每个顶点的法线并得到了这个: 结果

图片的左侧显示法线(每个顶点和三角形)和线框,右侧是来自相同相机角度的照明景观。

所以,我很好奇,我做错了什么?

我这样计算法线:

更新:vcs

位桶源

0 投票
1 回答
494 浏览

c# - 网格划分示例 -> 网格错误 | 探戈计划 | 统一

我正在尝试使用 Project Tango Unity3d-Demos 中的网格化示例来检测我的应用程序中与现实世界对象的碰撞。但是,网格中有很多小错误。这些浮动的“气泡”与我想要完成的工作适得其反,但我无法在Meshing script中找到改变它的方法。 屏幕截图:网格化 Unity

如何修改脚本以查找和删除要靠近且未连接到主网格的顶点?

使用 Izar 版本更新结果: 在此处输入图像描述

0 投票
1 回答
911 浏览

marching-cubes - 行进立方体等值

我正在尝试实现 Marchin Cubes 算法,但我有一些问题(这可能非常微不足道,但我似乎找不到答案)。

当 Isovalue = 5 时,我有一个这样的块:

因为 0 < 5,所以左角都应该标记为“关闭”。10 应该被标记为“on”,因为 10 > 5。但是右下角的 5 呢?这应该打开还是关闭?

当我使用上面的示例使用线性插值时(假设 5 标记为“on”),这就是交点应该在的位置吗?(标有 x)

当我为这个块绘制时,它应该基本上是两个 x 之间的一条线吗?

提前致谢!

0 投票
0 回答
292 浏览

marching-cubes - 等值与数据值相同时的行进方块?

我试图了解当使用行进“正方形”算法时等值与数据值相同时会发生什么。例如,如果您有以下 2D 网格:

在此处输入图像描述

现在,如果你取一个等值 5 并在遇到这样的块时画线?

我已经尝试在这里绘制它,但我不确定它是否正确:

在此处输入图像描述

0 投票
0 回答
1035 浏览

python - 计算等值面的面积

我正在分析几个包含以高斯立方体文件格式报告的体积数据的文件(单击此处查看说明)。

我在 Python 中创建了这个脚本,以使用 numpy 和 skimage 计算和表示等值面:

上一个脚本的结果

问题是:如何计算结果图中显示的所有等值面的总面积?如何根据其值为每个三角形着色?

0 投票
1 回答
443 浏览

c++ - DirectX/C++:行进多维数据集索引

我已经在 DirectX 环境中实现了 Marching Cube 算法(为了测试和玩得开心)。完成后,我注意到生成的模型看起来严重失真,好像索引关闭了。

在此处输入图像描述

我试图提取索引,但我认为顶点的排序已经正确,使用查找表,http://paulbourke.net/geometry/polygonise/上的示例。当前版本使用 15^3 卷。

Marching cubes 像往常一样遍历数组:

MarchCube 函数被调用:

交叉点计算:

原始实现被推入 DirectX 的持有结构中。

(这与原始 GL 实现的顺序相同)

0 投票
2 回答
609 浏览

raycasting - 光线投射如何用于 3D 表面重建?

我正在为一个项目研究 3D 重建算法。我经常在 3D 表面重建文献中提到“光线投射”和“行进立方体”主题。我读到在 3D 点云的“有符号距离函数 (SDF)”表示上的光线投射会创建一个表面模型。但我想我还没有很好地理解这一点。光线投射会产生 3D 表面模型吗?我知道光线投射可以帮助我们找到 SDF 体积中的零交叉点,因此我们将获得表面点。但是,光线投射是否会像行进立方体算法那样创建类似于 3D 模型的网格?请向我推荐一个很好的文档,我可以在其中了解用于表面重建的光线投射。

0 投票
2 回答
6013 浏览

python - Scikit 图像行进立方体

我正在使用行进立方体算法的 Scikit Image 实现来生成等值面。

生成以下错误:

ValueError:需要超过 2 个值才能解压

工作正常,所以看起来算法根本没有为normals和生成值values。有没有人有过这类问题的经验?

此外,我不明白faces算法输出的必要性,因为网格中每个三角形的一组 3 个顶点应该足以描述等值面?

0 投票
1 回答
934 浏览

python - Scikit 图像行进立方体输出

我正在使用行进立方体算法的 Scikit Image 实现来生成等值面。

创建图像堆栈的值为 10 的等值面stack,并将顶点数据输出到verts,将面数据输出到 `faces.

verts和的输出数组的格式faces(n,3)其中 n 是顶点/面的数量,三列对应于坐标。

有谁知道这些输出数组是如何索引的?什么决定了它们在数组中的注册顺序?另外,为什么faces需要数组,因为仅顶点的知识就足以构建等值面?

0 投票
1 回答
590 浏览

opengl - 可视化使用行进立方体生成的等值面

我目前正在使用 OpenGL(更具体地说是通过 VisPy 绑定)来进行一些科学数据可视化。我有一个体积数据集,我想可视化其中存在的一些等值面。skimage.measure我使用 Python库中的内置行进立方体算法生成等值面。

所以,我有一组顶点,我有一组索引,它们将网格的三角剖分定义为skimage.measure.marching_cubes. 这些可以直接转换为VertexBufferIndexBuffer对象进行渲染。但是将纹理应用于等值面的正确方法是什么?我不需要做任何花哨的事情,基本上只是一些颜色,这样可以更清楚地看到它。

本质上,这是我的困惑点。顶点坐标是在盒子上定义的,因为我的体积是 in和in[0,2] x [0,2] x [0, 1]的两倍。如果我的理解是正确的,纹理坐标总是在立方体上定义。我一直在尝试生成一个简单的体积纹理,通过将和分量除以 2 将顶点坐标转换为纹理坐标,然后将体积纹理中的这些坐标用作. 但这不起作用(请参阅附图)。这是一些代码:xyz[0,1] x [0,1] x [0, 1]xytexcoord

顶点着色器:

片段着色器:

3D 纹理当前设置如下。请注意,这个纹理不应该意味着那么多;我只是想在各个方向上放置一个渐变并调整设置,这样我就可以看到输出的不同。更改此纹理对我看到的内容没有影响。

VertexBufferIndexBuffer行进立方体算法的输出完全相同。如上所述,texcoord简单来说就是将顶点坐标与x坐标y除以二。

这是我看到的屏幕截图,它具有正确的等值面形状,但纹理非常错误。

一个可怕的纹理等值面。