4

序章

球面上の一部の領域を強調しようとしています。この領域は透明ではない色(alpha = 1.0)で、球の他の部分は半透明(alpha = 0.5)である必要があります。

問題

とを考慮するWAlpha(Data >= DummyValue) = 1.0WAlpha(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 に答える