我对Matlab的trimesh功能有疑问。
我需要做的是改变通过trimesh功能超时绘制的形状。我实际上设法通过再次绘制转换后的面部来做到这一点,这给了我预期的形状。这是我绘制形状的方式:
hc = trimesh(triangles,candide3(:,1),candide3(:,2),candide3(:,3));
这里 candide3 是一个113x3双顶点顶点,而三角形是一个184x3双矩阵索引,其中每一行都是一个三角形。这完全是我想要的。然后我需要转换面部 - 而三角形始终保持相同的矩阵, candide3 的一些条目需要实时更改加班(每秒约25次) )。如果我这样做:
candidet = transform(candide3, ...);
trimesh(triangles,candide3(:,1),candide3(:,2),candide3(:,3));
我完全得到了我正在寻找的转变。这很好,但还不够。我想避免每秒调用trimesh 25次并改为设置新的顶点。所以我尝试了 set 函数,如下所示:
candidet = transform(candide3, ...);
set(hc,'XData',candidet(:,1),'YData',candidet(:,2),'ZData',candidet(:,3));
但这并没有给出预期的结果:它描绘了一堆三角形和表面,甚至没有接近我正在寻找的东西,它感觉奇怪和随意。因此,通过文档我也尝试了这个:
candidet = transform(candide3, ...);
hc.XData = candidet(:,1);
hc.YData = candidet(:,2);
hc.ZData = candidet(:,3);
这就像上面的尝试一样废话。
我在Max OS X El Capitan上使用Matlab R2016b。感谢无论谁愿意帮助我。
答案 0 :(得分:1)
如果您检查trimesh
内部的工作方式,您会发现它将triangles
,x
,y
,z
参数带入{{{ 1}}这样的命令:
patch
因此,我建议您尝试以下方法:
h = patch('faces',triangles,'vertices',[x(:) y(:) z(:)],'facevertexcdata',c(:),...);