在Matlab中,我们可以使用以下方法创建一个具有平面闪电的基本表面:
peaks(10)
light
这会创建以下图片:
有没有办法获得表示当前视图表面贴片上光强度的矩阵?或者有一种方法可以简单地获取FaceColor属性,该属性应用于曲面上的各个面片(我假设从未点亮的FaceColor中减去这个FaceColor,我们可以获得强度)?
答案 0 :(得分:1)
调用峰值后,将定义表面对象。所以在你运行之后
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。如果它被定义为“平坦的”'并且每个顶点定义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,:);