首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用Matlab的' light‘函数来获取表面的光强度信息?

是否可以使用Matlab的' light‘函数来获取表面的光强度信息?
EN

Stack Overflow用户
提问于 2015-09-24 01:34:19
回答 1查看 291关注 0票数 2

在Matlab中,我们可以使用以下内容创建具有平面闪电的基本曲面:

代码语言:javascript
复制
peaks(10)
light 

这将创建以下图片:

有没有办法获得指示当前视图的曲面片上的光强度的矩阵?或者,有没有一种方法可以简单地获得应用于曲面上各个面片的FaceColor属性(我假设从未发光的FaceColor中减去这个FaceColor,我们可以获得强度)?

EN

回答 1

Stack Overflow用户

发布于 2015-09-24 03:44:57

调用峰值后,将定义一个曲面对象。所以在你跑完之后

代码语言:javascript
复制
peaks(10)
light

您可以使用以下命令找到此对象

代码语言:javascript
复制
s = findall(gcf,'Type','surface');

在这里,您可以将曲面转换为面片对象,并通过以下方式获取顶点颜色

代码语言:javascript
复制
fv = surf2patch(s.XData,s.YData,s.ZData,s.CData);
fvcdata = fv.facevertexcdata;

在您创建的图中,matlab使用来自逐顶点颜色的平面着色,因此面部颜色是根据顶点颜色和光源与面法线的角度计算出来的,这等同于

代码语言:javascript
复制
patch(fv,'FaceVertexCData',fvcdata,'FaceColor','flat'); light

更新

我查看了FaceColor属性的matlab documentation。如果它被定义为“flat”,并且FaceVertexCData是按顶点定义的,那么matlab将为每个面选择该面的第一个顶点的颜色。

因此,要获得有效的每个面部颜色,您可以执行以下操作:

代码语言:javascript
复制
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,:);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32745957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档