在Matlab中,我们可以使用以下内容创建具有平面闪电的基本曲面:
peaks(10)
light 这将创建以下图片:

有没有办法获得指示当前视图的曲面片上的光强度的矩阵?或者,有没有一种方法可以简单地获得应用于曲面上各个面片的FaceColor属性(我假设从未发光的FaceColor中减去这个FaceColor,我们可以获得强度)?
发布于 2015-09-24 03:44:57
调用峰值后,将定义一个曲面对象。所以在你跑完之后
peaks(10)
light您可以使用以下命令找到此对象
s = findall(gcf,'Type','surface');在这里,您可以将曲面转换为面片对象,并通过以下方式获取顶点颜色
fv = surf2patch(s.XData,s.YData,s.ZData,s.CData);
fvcdata = fv.facevertexcdata;在您创建的图中,matlab使用来自逐顶点颜色的平面着色,因此面部颜色是根据顶点颜色和光源与面法线的角度计算出来的,这等同于
patch(fv,'FaceVertexCData',fvcdata,'FaceColor','flat'); light更新
我查看了FaceColor属性的matlab documentation。如果它被定义为“flat”,并且FaceVertexCData是按顶点定义的,那么matlab将为每个面选择该面的第一个顶点的颜色。
因此,要获得有效的每个面部颜色,您可以执行以下操作:
c = fvcdata(fv.faces(:,1)); % per face color
[cmin,cmax] = caxis;
cmap = colormap;
m = length(cmap);
index = fix((c-cmin)/(cmax-cmin)*m)+1;
%Clamp values outside the range [1 m]
index(index<1) = 1;
index(index>m) = m;
faceColors = cmap(index,:);https://stackoverflow.com/questions/32745957
复制相似问题