【问题标题】:How to simply downsample a triangular mesh?如何简单地对三角形网格进行下采样?
【发布时间】:2015-01-20 14:16:16
【问题描述】:

当我在matlab中通过trisurf显示表面网格时会出现这个要求,因为网格很密集(高分辨率)并且渲染缓慢并且无法旋转。所以我想知道有一些直观的方法可以在保持基本形状的同时对网格进行下采样吗?

在我在这里发布问题之前,我已经用 Google 搜索过了。一个流行的工具iso2mesh,具有类似的功能,remeshsurf。但它首先通过原始网格重建体积,然后根据所需的分辨率构造新的网格。在我看来,一个重要的缺陷是它改变了原来的形状。

有人有什么想法吗? Matlab 函数将是最好的,因为它易于测试。

谢谢。

尼哥

【问题讨论】:

    标签: matlab mesh resampling downsampling triangular


    【解决方案1】:

    您应该对数据进行下采样,

    [x,y]=meshgrid(1:15,1:15);
    tri = delaunay(x,y);
    z = peaks(15);
    trisurf(tri,x,y,z)
    figure
    x1 = x(1 : 2 : end,1 : 2 : end);
    y1 = y(1 : 2 : end,1 : 2 : end);
    z1 = z(1 : 2 : end,1 : 2 : end);
    tri1 = delaunay(x1,y1);
    trisurf(tri1,x1,y1,z1)
    

    您甚至可以对每个数据使用downsample 函数。

    【讨论】:

    • 感谢您的及时和友好的回答。但也许这只适用于我们确切知道的曲面,比如 V=f(x,y)。但是,如果我只有高分辨率网格而不是分布函数本身的原始数据,或者有时它是一个 3D 函数,如 V=f(x,y,z)。那么,根据您的建议,我们应该从原始网格中插入新网格上的值吗?非常感谢。
    • @nicozuo,在调用trisurf 之前你有x,y,z,所以只需对其进行下采样。如果它不起作用,请提供示例数据。
    【解决方案2】:

    @Kamtal(最初我将此帖子添加为 cmets 但它提示“帖子太长”)非常感谢。我想,只有当船体的形状很明显时,你的方法才是一个不错的选择。对于其他情况,例如人脑的皮层,Matlab delaunay 函数不够智能,无法在保留基本形状(折叠)的同时重新生成三角形网格。 Here(约 1.7M)我上传了一个描述皮层表面(左右半球)的示例。可以通过以下代码显示, load mysurf.mat; figure, trisurf(mysurf.tri, mysurf.coord(:,1),mysurf.coord(:,2),mysurf.coord(:,3)); view(-90,0); daspect([1 1 1]); axis tight; camlight; axis vis3d off; lighting phong; material shiny;
    shading interp;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多