问题标签 [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 回答
2302 浏览

marching-cubes - 计算行进立方体网格的法线、索引和 UV 坐标

我正在关注这篇文章:

http://paulbourke.net/geometry/polygonise/

然而,提供的源代码只生成三角形。

如何计算法线、索引和 UV 坐标?

0 投票
3 回答
1786 浏览

c++ - C++ Marching Cubes算法讲解

我试图了解行进立方体算法的工作原理。

资料来源: http: //paulbourke.net/geometry/polygonise/

我不明白的是你如何计算“GRIDCELL”值。确切地说

我不清楚它实际上应该包含什么。

据我了解 XYZ p[8]; 是输出立方体的顶点坐标。但是什么 val[8]; 是?

0 投票
2 回答
1973 浏览

c++ - 行进立方体问题

我一直在尝试用 C++ 和 Qt 实现行进立方体算法。无论如何,到目前为止,所有的步骤都已经写好了,但是我得到了一个非常糟糕的结果。我正在寻找有关可能出现问题的方向或建议。我怀疑其中一个问题可能与体素概念有关,特别是关于哪个顶点进入哪个角(0、1、...、7)。此外,我不是 100% 确定如何解释算法的输入(我正在使用数据集)。我应该按照 ZYX 的顺序阅读它并以相同的方式移动行进立方体还是根本不重要?(撇开并非每个维度都必须具有相同大小的事实不谈)。

这是我反对它应该是什么样子的......

http://i57.tinypic.com/2nb7g46.jpg

0 投票
2 回答
1422 浏览

arrays - 大型阵列中的几何着色器错误

当我尝试链接我的几何着色器时,它会引发以下错误:

参考在着色器中声明的这个数组:

数组相当大。这是否与数组太大而无法在着色器中声明有关,还是有其他问题?

0 投票
1 回答
1275 浏览

c++ - 关于 Marching Cubes 算法的说明

关于Marching Cubes,我对其算法和实现有一些疑问。我浏览了 Marching Cubes 的 Paul Bourke 的优秀文章以及网站上可用的源代码,但是在理解以及如何以自己的方式实现算法方面,我仍然遇到了一些问题。问题如下:

  • Gridcell 大小 - 我读到 gridcell 大小会影响生成的 3D 模型的质量。例如,如果我有一堆大小为 (200*200*200) 的 x 射线图像,那么,网格单元的平板将从 2 个相邻的图像切片构建。因此,平板中的网格单元的总数将为 (200-1)*(200-1),其中每个网格单元角对应于图像的像素值/密度。它是否正确??此外,我们如何为 gridcell 实现不同的大小?

  • 体素大小 - 我已经阅读了 Marching Cubes 的一些参考资料,但我似乎无法找到算法中如何处理体素大小。如果我错了,请纠正我,在我的情况下,相邻图像层之间的间隙大小为 1 百万;因此,我该如何照顾 Marching Cubes 算法中的那些人,还是死路一条?它是否像 Gridcell 的大小一样被照顾?(假设:xy 坐标中一个像素的大小为 19 微米,而间隙/z 为 25.4 微米/1 mil 长度)

  • 网格单元角的坐标(立方体的顶点坐标) - 我试图通过图像集尺寸(200 * 200 * 200)的嵌套循环来分配具有索引 ijk 的网格单元角的坐标。它是否正确??有没有更快的方法呢??

注意:我已经在 VTK 中看到了 MC 的实现,但我很难理解它,因为它依赖于其他一些 VTK 类。

0 投票
1 回答
584 浏览

c++ - 行进立方体梯形/山脊效应

我正在实现一个行进立方体算法,通常基于Paul Bourke的实现,并进行了一些重大调整:

  • 标量场的预计算(浮点值)
  • 使用 std::map 避免最终列表中的重复顶点
  • 顶点存储以可视化 Ogre3D 中的最终网格

基本上我改变了他近 80% 的代码。我生成的网格有一些难看的 terrasses,我不知道如何避免它们。我认为对标量字段使用浮点可以完成这项工作。这是常见的效果吗?你怎么能避免它?

Terassing 行进方块

计算边上的顶点位置。(cell.val[p1] 包含给定顶点的标量值):

你可以在这里找到完整的源代码:https ://github.com/DieOptimistin/MarchingCubes 我使用 Ogre3D 作为这个例子的库。

0 投票
1 回答
406 浏览

three.js - Three.js Render 使用 ImmediateRenderObject 后未清除

我正在尝试用另一个 3D 场景掩盖一个 3D 场景。我设法让它与常规的 THREE.Mesh 对象一起工作,如下所示:

面具工作

主场景有一堆低多边形球体。面具场景有一个红色立方体。两个场景都作为纹理传递给自定义着色器,该着色器检查蒙版上的红色像素并绘制主像素。

有用。这是一个小提琴:http: //jsfiddle.net/at4rumn6/3/

--

但是,如果我像Marching Cubes示例中那样用 blob 替换一堆球体,它就会停止工作。问题如下图:

掩码错误

渲染器中似乎没有清除某些内容。它可能与THREE.ImmediateRenderObject有关,但我不明白它在做什么。这似乎是一个非常具体的案例,我可能在库中发现了一个限制。或者,也许我只是做错了什么。

这是另一个显示错误的小提琴:http: //jsfiddle.net/Lwm93rxr/2/

有没有办法清除缓冲区并让我的面具在没有来自其他场景的任何“污垢”的情况下工作?

0 投票
0 回答
275 浏览

opengl - 从 OpenGL 计算着色器获取动态数据的最佳方式是什么?

目前我正在编写一个计算着色器,它实现了行进立方体。但是我仍然在努力解决一些关于如何从计算着色器中获取三角形信息或其他一些动态数据的问题。

在我看来有两种方法:

  1. 创建一个足够大的SSBO(我认为,现在也可以创建一个具有动态大小的,但我不确定)并在着色器中使用原子计数器将我的数据写入缓冲区。但我认为,由于原子计数器,这是非常低效的。
  2. 分几个步骤做行进立方体的东西。首先,获取案例并将三角形的数量保存在纹理或其他缓冲区中。然后。使用前缀 sum 来获取三角形的数量。根据该总和创建一个缓冲区,并让每个着色器将其三角形信息写入缓冲区。

我知道这两种方式没有详细描述,但是理解思路应该足够了。我现在的问题是:还有其他很好的可能性可以从计算着色器中获取信息,我不知道吗?

0 投票
1 回答
1528 浏览

vtk - VTK 使用 VoxelModeller 构建点云的体素空间

这就是我想做的事情:我有一个 .pcd(PCL 标准格式)文件,其中存储了一个点云,我想构建它的体素表示,然后提取等值面。如果我没记错的话,我应该按照这个例子http://www.vtk.org/Wiki/VTK/Examples/Cxx/Modelling/MarchingCubes,我应该将我的 pcd 设置为 vtkVoxelModeller 而不是球体的输入。

所以我尝试了这种方式:

其余代码取自示例,我所做的唯一修改是根据我的表面设置边界,并且:

当我运行可执行文件时,我得到一个空窗口:(

由于我是 VTK 的新手,我的研究项目非常需要它,如果有人能解释我做错了什么并指出正确的解决方案,我会非常高兴。

谢谢

0 投票
1 回答
1477 浏览

c++ - 如何将行进方块用于多个轮廓?

找到第一个轮廓后如何使行进广场继续进行?

我正在处理的图像中的轮廓会经常发生变化,因为我处于嵌入式环境(android/ios)中,所以我首先想要一个快速性能的解决方案。并且使用外部库不是一种选择。

我尝试了连接组件标签,但从未让它工作,因为我有一个不是黑白(没有阈值)的 PNG,如果我没记错的话,CCL 只适用于黑白(二进制)图像。

我考虑过将 blob 信息保存到另一个向量并检查新发现的像素是否属于较早发现的 blob,但我认为这不够快,因为向量中充满了越来越多的 blob,因此检查的成本越来越高向量中的每个 blob。

这让我几乎完成了当前的方法,即擦除我找到并重复的轮廓,直到什么都没有?但这是我目前使用的方法,似乎也很昂贵。

如果没有快速的解决方案,那么任何人都可以提出不同的方法......即使这意味着不同的算法。

Mark1:我选择了行军广场,因为即使主题有洞,我也只需要轮廓的轮廓。