- Increase the Opacity: Setting 'FaceAlpha' to 1 (or removing the 'FaceAlpha' setting, as its default value is 1) will make the surfaces fully opaque, preventing the underlying color from showing through.
Colour interference when two surfaces overlap
5 次查看(过去 30 天)
显示 更早的评论
Colour interference when two surfaces overlap, how to solve it?![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1717491/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1717491/image.png)
0 个评论
回答(1 个)
Piyush Kumar
2024-6-18
编辑:Piyush Kumar
2024-6-18
If you are talking about the blending of colours at the point where surfaces intersect or overlap, I will try to explain with an example.
[X,Y] = meshgrid(linspace(-2, 2, 50));
Z = @(x,y,c) x.^2 + y.^2 + c;
figure(1)
surf(X, Y, +Z(X,Y,-4), 'FaceColor','g', 'FaceAlpha',0.5, 'EdgeColor','none')
hold on
surf(X, Y, -Z(X,Y,-4), 'FaceColor','r', 'FaceAlpha',0.5, 'EdgeColor','none')
hold off
grid on
I have specified only 2 colours for the 2 surfaces repectively, but multiple colours are visible. This blending effect is a result of the rendering process in MATLAB, where the semi-transparent (due to 'FaceAlpha',0.5) surfaces allow for the underlying color to show through, creating a visual effect of color mixing or interference.
To avoid this color blending effect and maintain the solid colors you've specified without seeing a mix at the intersections, you can:
[X,Y] = meshgrid(linspace(-2, 2, 50));
Z = @(x,y,c) x.^2 + y.^2 + c;
figure(1)
% Making the surfaces opaque by removing 'FaceAlpha'
surf(X, Y, +Z(X,Y,-4), 'FaceColor','g', 'EdgeColor','none')
hold on
surf(X, Y, -Z(X,Y,-4), 'FaceColor','r', 'EdgeColor','none')
hold off
grid on
4 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Lighting, Transparency, and Shading 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!