问题标签 [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.
three.js - 带点着色器的threejs metaballs
我正在尝试在 2pha 制作的 ThreeJS 中测试一个简单的点着色器:https ://2pha.com/demos/threejs/shaders/simple_dots.html
使用 Marching Cubes 的元球似乎无法正常工作:https ://threejs.org/examples/webgl_marchingcubes.html 。这是UV坐标问题吗?ThreeJS 版本有一个enableUvs
标志,但似乎还不够。
这里着色器传递给ShaderMaterial
python - 3D 点的平滑 Mayavi 可视化
这是我第一次在 3D 中进行可视化并与之合作,mayavi
所以请原谅我缺乏知识。我有一个想要可视化的 3D Numpy。Array 表示一个体素网格,到目前为止,我尝试使用points3d
,但可视化看起来并不流畅,这是我的代码:
这就是它的样子:
这就是我想要的样子:
像这样让它顺利进行的最佳方法是什么?谢谢!!!
编辑:我发现我需要一个行进立方体算法,我怎么能在 python 中做到这一点,在mayavi
or中有什么东西vtk
吗?
c++ - Visual Hull C++ 和行进立方体
我是 3D 建模领域的新手,我需要在 C++ 中创建一个视觉船体和行进立方体。所以,我有一组二进制掩码、相机矩阵,我想创建一个 STL 文件。我真的不明白这个算法是如何工作的,也许有人可以用简单的方式解释它。此外,您能否向我推荐一些可能对我有帮助的阅读论文和 c++ 库?
非常感谢!
python - 如何使用 mplot3d 设置网格的原点?
按照scikit-image doc中的示例,我使用行进立方体算法生成球面网格。我想将单位球壳居中于 x,y,z 网格定义的原点。但是,我不能这样做,因为我不知道如何将 x、y、z 信息与 mpl_toolkits.mplot3d.art3d.Poly3DCollection 一起放置。这是代码:
问题是marching_cubes_lewiner
函数没有考虑x,y,z
到。如网格所暗示的那样,如何将生成的球体居中于 0,0,0?
haskell - Haskell OpenGL 产生不受欢迎的阴影
我用 Haskell OpenGL 绘制了 Barth 六分仪,但出现了问题。我也在 R 中画了它(带有包rgl
和misc3d
),没有问题。这两种算法(在 Haskell 和 R 中)非常相似。Barth sextic 是一个隐式曲面,在 Haskell 中,我使用行进立方体算法计算该曲面的三角剖分,该算法是通过将其中一个转换misc3d
为 Haskell 和 C 得到的。我使用顶点法线,每个法线由隐式的梯度定义方程。
这是问题所在:
我不想要这些黑色阴影。当我看六分仪的背面时,旋转 180°,没有这样的阴影:
完整的代码可以在这个 Github repo中找到。以下是与颜色相关的代码部分:
我试图改变最后一段代码中的颜色,但没有办法摆脱这些阴影。我对颜色做坏事了吗?我确信法线是正确的,因为这在 R 中有效。但是阴影出现在表面不光滑的地方,所以我想知道问题是否是由法线引起的。
R 渲染:
编辑
我设法摆脱了这些阴影:
真不知道怎么了,做了这么多尝试……不过不管怎样,现在的问题是sextic的背面太轻了:
import - 如何使用 PCL io::loadPLYFile 导入 .ply 文件?
将 ply 文件导入我的程序时,我收到一条错误消息,指出以下消息出现问题:
我使用了一个示例层文件:https ://people.sc.fsu.edu/~jburkardt/data/ply/apple.ply
我已经尝试过来自不同来源的不同层文件,但它们都不起作用。调试程序时,io::loadPLYFile 不会生成有效的点云。PCL 和我的程序的运行时库是相同的。
我希望 PCL 函数 io::loadPLYFile 正确加载文件,如文档http://docs.pointclouds.org/1.3.1/group__io.html中所述
coordinates - 在 skimage 中缩放行进立方体算法输出的顶点坐标
我正在尝试使用skimage.measure.marching_cubes_lewiner
来解决一些 isosurface f(x,y,z)=0
。在我的情况下f
是强非线性的,并且当坐标以对数间距给出时最好映射。因为行进立方体需要一个规则网格来构建体素,所以我正在处理与我的原始坐标X,Y,Z
相对应的坐标网格网格log10
,因此我的等值面由 等价地给出f(10**X,10**Y,10**Z)=0
。一切都会好起来的,如果不是因为假设我正在使用X,Y,Z
in [-1.5,2]^3
(相当于x,y,z
in [0.03,100.]^3
),由 给出的解的顶点坐标skimage.measure.marching_cubes_lewiner
不在这个立方体中。
在回答了关于 SO 的另一个相关问题之后,我认为这可能是因为该算法可能在考虑单一体积的情况下工作,因此我需要spacing
在我的调用中设置正确的输入参数skimage.measure.marching_cubes_lewiner
。以这种方式,假设我将我的函数映射到每个坐标f
的点网格上N
,以便我通过numpy.diff([-1.5,2])/N
每个坐标增加指数,因此我调用:
然而,出乎意料的是,解点的坐标通常出现在[0,Vx]*[0,Vy]*[0,Vz]
,和Vx>XRange[-1]
中。我不知道为什么会发生这种情况,也不知道如何正确地将等值面解决方案的坐标重新调整为问题的真实单位。Vy>YRange[-1]
Vz>ZRange[-1]
c++ - 在标量场上进行行进立方体期间的插值问题
我有一个规则的方形网格,其中我所有的数据点都存储在质心。我有一个标量场(范围:0->1),它指示细胞内物质的数量。我有兴趣识别细胞内这种物质的界面(用于进一步处理而不是用于可视化)。
我遇到了行进立方体算法(http://paulbourke.net/geometry/polygonise/)。在这里,我需要单元格角落的值。所以我平均了相邻单元格的质心值。这种平均加上进一步的线性化以在 MC 中的“多边形化”期间找到交点,导致了诸如此类的非现实界面。
在这里,灰色细胞充满了物质,而它的邻居则只有最少量的物质。理想情况下,这应该非常接近 celtre 单元的边界。我觉得这是由于 0.25 和 0 之间的线性插值导致它远离其预期位置而发生的。
可以做些什么来解决这个问题吗?