如何强调球面上的某些区域

时间:2012-07-20 13:21:57

标签: matlab plot 3d transparency geometry-surface

简介

我试图强调球形表面上的某个区域,说这个区域应该着色为不透明(alpha = 1.0),球体的其他部分应该着色为半透明(alpha = 0.5)

问题

考虑WAlpha(Data >= DummyValue) = 1.0WAlpha(Data < DummyValue) = 0.5,以下命令无法按预期工作:

surf(X, Y, Z, Data, 'AlphaData', WAlpha, 'FaceAlpha', 'interp');

它将所有非选定区域绘制为完全透明:

Wrong transparency

注意

设置&#39; FaceAlpha&#39;时,我没有任何问题。标量值(即它不是我的图形卡的问题):

surf(X, Y, Z, Data, 'AlphaData', WAlpha, 'FaceAlpha', 0.5);

Semi transparent everywhere

源代码

以下是我为重现此问题而创建的非常简短的虚拟代码的链接:link

如果您有任何其他想法强调所选区域而不是使用透明度,请告诉我。

2 个答案:

答案 0 :(得分:3)

这是快速测试:

%# surface data
Z = membrane;

%# alpha-transparency matrix
A = ones(size(Z))*0.3;          %# transparent by default
A(abs(Z)>0.5) = 1;              %# make certain region opaque

%# plot
figure('Renderer','opengl')
surf(Z, 'AlphaData',A, 'AlphaDataMapping','none', ...
    'FaceAlpha','interp', 'EdgeColor','none')

结果:

screenshot

答案 1 :(得分:1)

哎呀,发现它......

需要更改Alim对象上的axes属性,因为在设置[min(WAlpha) max(WAlpha)]而不是保留{{>}时 设置为AlphaData {1}}。所以命令是:

[0 1]