Occlusion for two surfaces in linked axes

조회 수: 1 (최근 30일)
jonas
jonas 2017년 11월 24일
댓글: Greg 2017년 11월 29일
I wonder if there is a way to render two surfaces on top of each other, so that the surfaces properly occlude each other.
In the following example you can see the standard behaviour:
[X,Y,Z] = peaks(128);
X2 = X(32:64,32:64);
Y2 = Y(32:64,32:64);
Z2 = Z(32:64,32:64)+1;
fig = figure(1);clf
axes1 = axes('Parent',fig);
surf1 = surf(X,Y,Z,'Parent',axes1);
surf1.EdgeColor = 'none';
axis(axes1,'off');
axes2 = axes('Parent',fig);
surf2 = surf(X2,Y2,Z2,'Parent',axes2);
surf2.EdgeColor = 'red';
surf2.FaceAlpha = 0.5;
axis(axes2,'off');
colormap(axes1,parula);
colormap(axes2,cool);
linkprop([axes1,axes2],{'CameraPosition','CameraUpVector','XLim','YLim','ZLim'});
The second surface is always rendered on top of the first, even if it not be seen at some points, due to being occluded by the first.
I can decrease the transparency of the second surface, but it leads to clutter and makes it difficult to see which surface is on top of which.
Is there some axes property that allows me to render both surfaces as if their data came from a single surface?
  댓글 수: 5
jonas
jonas 2017년 11월 29일
편집: jonas 2017년 11월 29일
Thank you very much for the suggestion, this solved my problem.
I didn't know that 3d colormaps were a possible input to surf :)
Greg
Greg 2017년 11월 29일
Glad to help.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Surface and Mesh Plots에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by