当我在Matlab中通过trisurf
显示表面网格时会出现这个要求,因为网格是密集的(高分辨率)并且渲染缓慢且无法旋转。所以我想知道有一些直观的方法来对网格进行下采样,同时保持基本形状?
在我发布这个问题之前,我已经用Google搜索了。流行的工具iso2mesh具有类似的功能remeshsurf
。但它首先通过原始网格重建体积,然后根据所需的分辨率构造新网格。在我看来,一个重要的缺陷是它改变了原来的形状。
任何人都有一些想法? Matlab函数是最好的,因为它很容易被测试。
感谢。
尼科
答案 0 :(得分: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
函数。
答案 1 :(得分:0)
@Kamtal(最初我添加了这篇帖子作为评论,但它提示“太长的帖子”)非常感谢。我想,只有当形状的船体是显而易见的时候,你的方法才是一个不错的选择。对于其他情况,例如,人类大脑的皮层,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;