问题标签 [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.
c# - 网格划分示例 -> 网格错误 | 探戈计划 | 统一
我正在尝试使用 Project Tango Unity3d-Demos 中的网格化示例来检测我的应用程序中与现实世界对象的碰撞。但是,网格中有很多小错误。这些浮动的“气泡”与我想要完成的工作适得其反,但我无法在Meshing script中找到改变它的方法。
如何修改脚本以查找和删除要靠近且未连接到主网格的顶点?
marching-cubes - 行进立方体等值
我正在尝试实现 Marchin Cubes 算法,但我有一些问题(这可能非常微不足道,但我似乎找不到答案)。
当 Isovalue = 5 时,我有一个这样的块:
因为 0 < 5,所以左角都应该标记为“关闭”。10 应该被标记为“on”,因为 10 > 5。但是右下角的 5 呢?这应该打开还是关闭?
当我使用上面的示例使用线性插值时(假设 5 标记为“on”),这就是交点应该在的位置吗?(标有 x)
当我为这个块绘制时,它应该基本上是两个 x 之间的一条线吗?
提前致谢!
c++ - DirectX/C++:行进多维数据集索引
我已经在 DirectX 环境中实现了 Marching Cube 算法(为了测试和玩得开心)。完成后,我注意到生成的模型看起来严重失真,好像索引关闭了。
我试图提取索引,但我认为顶点的排序已经正确,使用查找表,http://paulbourke.net/geometry/polygonise/上的示例。当前版本使用 15^3 卷。
Marching cubes 像往常一样遍历数组:
MarchCube 函数被调用:
交叉点计算:
原始实现被推入 DirectX 的持有结构中。
(这与原始 GL 实现的顺序相同)
raycasting - 光线投射如何用于 3D 表面重建?
我正在为一个项目研究 3D 重建算法。我经常在 3D 表面重建文献中提到“光线投射”和“行进立方体”主题。我读到在 3D 点云的“有符号距离函数 (SDF)”表示上的光线投射会创建一个表面模型。但我想我还没有很好地理解这一点。光线投射会产生 3D 表面模型吗?我知道光线投射可以帮助我们找到 SDF 体积中的零交叉点,因此我们将获得表面点。但是,光线投射是否会像行进立方体算法那样创建类似于 3D 模型的网格?请向我推荐一个很好的文档,我可以在其中了解用于表面重建的光线投射。
python - Scikit 图像行进立方体
我正在使用行进立方体算法的 Scikit Image 实现来生成等值面。
生成以下错误:
ValueError:需要超过 2 个值才能解压
但
工作正常,所以看起来算法根本没有为normals
和生成值values
。有没有人有过这类问题的经验?
此外,我不明白faces
算法输出的必要性,因为网格中每个三角形的一组 3 个顶点应该足以描述等值面?
python - Scikit 图像行进立方体输出
我正在使用行进立方体算法的 Scikit Image 实现来生成等值面。
创建图像堆栈的值为 10 的等值面stack
,并将顶点数据输出到verts
,将面数据输出到 `faces.
verts
和的输出数组的格式faces
是(n,3)
其中 n 是顶点/面的数量,三列对应于坐标。
有谁知道这些输出数组是如何索引的?什么决定了它们在数组中的注册顺序?另外,为什么faces
需要数组,因为仅顶点的知识就足以构建等值面?
opengl - 可视化使用行进立方体生成的等值面
我目前正在使用 OpenGL(更具体地说是通过 VisPy 绑定)来进行一些科学数据可视化。我有一个体积数据集,我想可视化其中存在的一些等值面。skimage.measure
我使用 Python库中的内置行进立方体算法生成等值面。
所以,我有一组顶点,我有一组索引,它们将网格的三角剖分定义为skimage.measure.marching_cubes
. 这些可以直接转换为VertexBuffer
和IndexBuffer
对象进行渲染。但是将纹理应用于等值面的正确方法是什么?我不需要做任何花哨的事情,基本上只是一些颜色,这样可以更清楚地看到它。
本质上,这是我的困惑点。顶点坐标是在盒子上定义的,因为我的体积是 in和in[0,2] x [0,2] x [0, 1]
的两倍。如果我的理解是正确的,纹理坐标总是在立方体上定义。我一直在尝试生成一个简单的体积纹理,通过将和分量除以 2 将顶点坐标转换为纹理坐标,然后将体积纹理中的这些坐标用作. 但这不起作用(请参阅附图)。这是一些代码:x
y
z
[0,1] x [0,1] x [0, 1]
x
y
texcoord
顶点着色器:
片段着色器:
3D 纹理当前设置如下。请注意,这个纹理不应该意味着那么多;我只是想在各个方向上放置一个渐变并调整设置,这样我就可以看到输出的不同。更改此纹理对我看到的内容没有影响。
和VertexBuffer
与IndexBuffer
行进立方体算法的输出完全相同。如上所述,texcoord
简单来说就是将顶点坐标与x
坐标y
除以二。
这是我看到的屏幕截图,它具有正确的等值面形状,但纹理非常错误。