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

c# - 向行进方块添加噪音不会影响地形

我正在使用行进立方体和 3D 噪声来生成可修改/有趣的地形。为什么我的噪音没有应用到我的行进立方体上?

请记住,我遵循了 GPU Gems 实施的噪音。

我已经尝试使用 2D 噪声来获得至少某种效果,但我有同样的问题。我的问题是一切都显得平淡无奇。除了我没有使用着色器外,我正在关注行进立方体上的 GPU 宝石。我将点等值设置为-point.y(位置)并获得正常的平坦地形。然后我用 perlin 噪声中的单位添加噪声,然后我仍然保持平稳。顺便说一句,我的iso级别是0。我添加了一个 3D perlin 噪声方法并使用它,但仍然一无所获。我不确定我做错了什么。

这是我用于统一 3D 噪声的代码:

这是我用来将等值应用于点的代码:

等值 = -transform.position.y + Perlin3D(transform.position.x * 0.9f, transform.position.y * 0.9f, transform.position.z * 0.9f);

我的iso级别设置为0。

我的行进立方体似乎工作正常。我已经尝试了很多不同的输出,但我自己编辑点以检查我是否得到正确的输出并且我做到了。不知道该做什么或我做错了什么。

我希望有一些地形。没有看到错误消息,我认为唯一可能出错的问题是噪音本身。因为我的行进立方体中的其他所有东西都按预期工作。谢谢!

0 投票
1 回答
2918 浏览

python-3.x - 在 Python 3 中使用行进立方体进行点云三角测量

我正在研究 3D 重建系统,并希望使用 Python 3 从注册的点云数据生成三角形网格。我的对象不是凸的,因此行进立方体算法似乎是解决方案。

我更喜欢使用这种方法的现有实现,所以我尝试了scikit-imageOpen3d,但是这两个 API 都不接受原始点云作为输入(请注意,我不是这些库的专家)。我转换数据的尝试失败了,而且由于文档没有阐明函数的输入格式,所以我的想法已经不多了。

这些是我想要的片段,这pcd_to_volume是我需要的。

scikit 图像

开放3d

我无法找到正确编写pcd_to_volume函数的方法。我不喜欢另一个图书馆,所以这两种解决方案对我来说都很好。

您对正确转换我的数据有什么建议吗?点云是一个Nx3矩阵,其中dtype=float

你知道另一个适用于原始点云数据的[行进立方体算法]实现吗?我更喜欢 scikit 和 open3d 之类的库,但我也会考虑 github 项目。

0 投票
1 回答
5456 浏览

matplotlib - 如何在 Python 中将 2D DICOM 切片转换为 3D 图像

我目前正在执行一项任务,我需要使用 NumPy、Matplotlib(Marchingcubes、Triangulation 或 Volumemodel)将 DICOM 切片绘制成一个 3D 模型

我已经尝试过这个网站的方法:

https://www.raddq.com/dicom-processing-segmentation-visualization-in-python/

但不幸的是,这对我没有用

DICOM 切片可视化

0 投票
0 回答
84 浏览

algorithm - 90 角与行进立方体算法 - 插值功能

我正在实施Marching Cubes Algorithm。假设我有类似于那幅画的 3D图像。当我使用 MC 算法时,我得到了这样的结果:effect

Everywhere where angle is ~ 90 度 MC 算法也近似于该元素(它来自插值函数,但我特别感兴趣的是禁用角度为 ~ 90 度的任何地方的近似)。

所以代替那个,我想要这样的东西但只在角度~90的地方,我期望正常近似的其他地方(来自MC算法的经典)。

电流插值功能

我使用了有符号距离函数(SDF)。

可能的解决方案

解决方案之一是为立方体(体素)设置较小的尺寸。但由于性能,我不能这样做。所以我认为关键是插值函数。

0 投票
1 回答
386 浏览

python - 在 python 中创建网格等值。行进立方体

我创建了一个程序,它能够预测给定形状 nx3 的一组位置,它是形状 nx1 的等值(n 是样本数)。现在我希望能够将其可视化并将其保存为网格,我已经读过一种找到等值面的顶点和面的方法是使用一种称为行进立方体的算法,我发现它在 python skimage.measure . 但是我似乎无法理解如何利用给定的数据,将其提供给 measure.marching_cubes_lewiner,因为它只说接受体积数据(M,N,P)。

我试图将它重塑为 3d 数组,但我不知道它应该是什么样子。我试图将其作为网格进行但失败了。我觉得这应该不难,但我是网格和网格的新手。

总是会出现错误,即行进立方体应该是 3D 数组,而不是我试图给它的。

0 投票
0 回答
140 浏览

unity3d - 使用行进立方体算法(体素)实现多纹理着色

我目前正在使用 Unity 3D 中的行进立方体开发具有完全可变形、平滑体素地形的小行星采矿/探索游戏。我想实现一个类似于 Minecraft 的“元素 ID”系统,因为每种类型的材料都有一个唯一的整数 ID。这很容易生成,但现在我正试图找出一种渲染它的方法,以便每个单独的面代表其体素分配给的元素。我目前正在使用带有纹理数组的三平面着色器,并且我已经将它设置为使用预设的纹理 ID。但是,我需要能够将元素 ID 传递到整个小行星的着色器中,这就是我有限的着色器知识用完的地方。所以,我有两个主要问题:

  1. 如何从活动脚本中的 3D 数组获取数据到我的着色器,或者如何从该数组中采样点?

  2. 有没有更好/更有效的方法来做到这一点?我考虑过创建一个仅包含表面顶点及其相应 ID 的数组,但这样我将无法正确采样它们。我还考虑过可能将一个额外的变量与顶点本身捆绑在一起,但我不知道这是否可能。我很感激任何想法,谢谢。

0 投票
1 回答
2510 浏览

typescript - 将 SDF 计算为三角形网格的最有效方法

来自三角形、边和顶点的 SDF

你好。

在过去的一个月里,我一直在从各种来源收集信息,但没有找到适合我特定问题的想法。所以这是问题的表述:

给定一个缓冲区几何形式的网格(顶点坐标和顶点索引的 32 位数组 + 附加数组,例如顶点法线、uvs 或切线),计算一个均匀网格周围点的有符号距离函数 (SDF)几何学。

更具体地说,我打算在 Maxon 的 Cinema4D 或 Blender 等 3D 引擎中创建类似于 MetaBall 对象的东西。我已经成功地为所有几何图元实现了距离函数,但是任意网格 SDF 要求我实现蛮力方法 - 为每个网格点测试网格的每个三角形的距离 - 当然,对于复杂的网格。

现在,我回忆起这些问题中的大多数都需要构建树状结构,例如八叉树、KD-tree、BSP-tree 或 AABB-tree。然后我发现了一些关于所谓的快速扫描算法 (用于求解 Eikonal 方程)的文章,它需要首先用 0 填充位于边界上的网格点(在我的情况下是网格,或最接近网格)剩下的具有较大的值(Infinity),然后迭代求解非线性双曲边值问题(Gauss-Seidel)。我还在CGAL 库中找到了网格 SDF 方法的开源实现。或者,我也考虑过使用一些着色器库(如 GLSL),也许尝试使用 GPU 构建树,但我从未在 JS 或 TS 项目中使用过着色器。

我一直坚持的步骤不仅是选择最佳选项,而且实际上是有效地使用这些方法中的至少一种。例如:

  • 如果我想实现Fast-Marching Method,我必须遍历所有三角形,然后对于每个三角形,遍历所有网格点 Gijk,并使用类似于 Marching Cubes 查找表的网格单元格交叉点(但使用更多选项),我会为相交的单元格顶点插入接近 0 的值。我有一种感觉,这会花费不必要的时间,并且被证明不适合实时更新。

  • 我设法在 Unity中找到了一些Ray Marching SDF计算的示例。此外,由于我从未尝试过直接在 GPU 上计算任何东西,因此我不知道并行计算的实际限制是什么,也不了解如何进行此类计算。我可以并行计算到每个三角形的距离,然后快速排序每个网格点 Gijk 的所有距离吗?如果是这样,我将如何将它包含到 TypeScript 项目中?

  • 假设我在网格中的所有三角形周围构建了一个AABB 树(应该是 O(n * log(n)) ),然后给定一个网格点 Gijk (假设树根是一个包含 Gijk 和所有三角形的框) ,我会搜索最近的叶子并计算到其中包含的三角形的欧几里得距离(或者如果有多个,则选择)。(如果我错了,请纠正我)搜索应该是 O(log(n)),如果用户移动网格,更新将花费 O(n),其中 n 是三角形的数量。因此,如果 m 是网格大小,那么整个 SDF 计算将是 O(m * n * log(n)) ?这看起来不像是对 O(n * m) 蛮力方法的改进,但也许我弄错了复杂性。

我考虑过结合多种方法,但这一切似乎都非常耗时。我也想过使用 CGAL 库,或者为了我的项目而重构它,但我发现由于库中的所有依赖项,很难理解 C++ 代码。你们中有人做过类似的事情吗?你会推荐什么?

感谢您的所有见解。

0 投票
0 回答
199 浏览

unity3d - 从高度图到行进立方体

我一直在研究一个项目,并且一直在关注 Sebastian Lague 关于程序网格生成的教程,但需要使用行进立方体。

我的最终目标是生成带有噪声的可破坏程序地形。

我正在研究 Unity3D。我最近了解了行进立方体是什么,并且在过去的几周里一直在研究它。我遇到了障碍,不知道从哪里开始。

我想知道有没有办法仍然使用一些塞巴斯蒂安的代码,还是我必须完全重新启动?总的来说,我很困惑。我已经阅读了有关它的论文,但根本不知道如何实现它。

我也看过 catlikecoding tutorial on marching squares,但仍然无济于事。任何帮助将非常感激。谢谢!

0 投票
1 回答
262 浏览

python - 是否可以使用来自 3D 点云的 skimage 行进立方体重建(插值)3D 表面?

我有一个 3D 点云:

是否可以使用这个 3D 点云中skiamge的 '来“重建”一个 3D 表面?marching_cubes我检查了 skimage 的文档,但没有任何线索。任何帮助或提示表示赞赏。

0 投票
1 回答
109 浏览

c# - c# unity 3d坐标地图同步

我正在开发程序生成的地图/游戏。我在 3D 数组中有 20x20x20 点的 3D 块。我正在使用行进立方体算法来生成块。我尝试通过添加和减去值来操纵密度,但同时尝试将相邻块边缘与块 im 修改同步。向块的点添加密度

这是我很难使用的代码,但它不起作用:

我想检查边缘而不是所有点以节省性能。y 协调高度。

这就是我所说的:

在此处输入图像描述

这样它工作得很好,但我只想检查边缘。