4

介绍

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

问题

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

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

它将所有未选择的区域绘制为完全透明的:

错误的透明度

笔记

将“FaceAlpha”设置为标量值时我没有问题(即它不是我的图形卡的问题):

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

处处半透明

源代码

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

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

4

2 回答 2

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')

结果:

截屏

于 2012-07-20T14:01:05.217 回答
1

哎呀,找到了……

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

surf(X, Y, Z, Data, 'AlphaData', WAlpha, 'FaceAlpha', 'interp');
alim([0 1]);
于 2012-07-20T14:00:17.807 回答