%% Changing Transparency of Images, Patches or Surfaces
% This example shows how to modify transparency of images, patches and surfaces.
%
%% Transparency for All Objects in Axes
% Transparency values are referred to as alpha values. Use the alpha function to set the transparency for all image, patch, and surface objects in the current axes. Specify a transparency value between 0 (fully transparent) and 1 (fully opaque).

t = 0:0.1:2*pi;
x = sin(t);
y = cos(t);

figure
patch(x,y,'r')
patch(x+0.8,y,'g')
patch(x+0.4,y+0.8,'b')
axis square tight 
alpha(0.3)

%
%% Transparency for Individual Surfaces
% The transparency of a surface is defined by its AlphaData property. Set the alpha data as either a scalar value or a matrix of values specifying the transparency of each vertex of the surface. The FaceAlpha property indicates how the transparency of the surface faces are determined from vertex transparency.

[X,Y,Z] = peaks(20);
s2 = surf(X,Y,Z);

s2.AlphaData = gradient(Z);    
s2.FaceAlpha = 'flat';

%
%% Transparency for Individual Images
% Like surfaces, the transparency of an image is also defined by its AlphaData property. For images, set the alpha data as either a scalar value or a matrix of values specifying the transparency of each element in the image data.
%
% For example, use transparency to overlay two images. First, display the image of the Earth.

earth = imread('landOcean.jpg');
image(earth)    
axis image

%
% Then, add a cloud layer to the image of the Earth using transparency.

clouds = imread('cloudCombined.jpg');
image(earth)
axis image
hold on

im = image(clouds);
im.AlphaData = max(clouds,[],3);    
hold off

%
%% Transparency for Individual Patches
% The transparency of a patch is defined by its FaceAlpha and FaceVertexAlphaData properties. For constant transparency across the entire patch, set the FaceVertexAlphaData to a constant between 0 (fully transparent) and 1 (fully opaque), and set the FaceAlpha property to 'flat'.

cla
p1 = patch(x,y,'r');
axis square tight
p1.FaceVertexAlphaData = 0.2;
p1.FaceAlpha = 'flat' ; 

%
% For transparency that varies across the patch, set the FaceVertexAlphaData to a matrix of values specifying the transparency at each vertex or each face of the patch. The FaceAlpha property then indicates how the face transparencies are determined using the FaceVertexAlphaData. If alpha data is specified for vertices, FaceAlpha must be set to 'interp'.

p1.FaceVertexAlphaData = x';
p1.FaceAlpha = 'interp';

%
%% Transparency with Texture Mapping
% Texture mapping maps a 2-D image onto a 3-D surface. An image can be mapped to a surface by setting the CData property to the image data and setting the FaceColor property to be 'texturemap'.
%
% This example creates a 3-D view of the earth and clouds. It creates spherical surfaces and uses texture mapping to map the images of the earth and clouds onto the surfaces.

[px,py,pz] = sphere(50);

sEarth = surface(py, px ,flip(pz));
sEarth.FaceColor = 'texturemap';
sEarth.EdgeColor = 'none';
sEarth.CData = earth;
hold on
sCloud = surface(px*1.02,py*1.02,flip(pz)*1.02); 

sCloud.FaceColor = 'texturemap'; 
sCloud.EdgeColor = 'none';
sCloud.CData = clouds;

sCloud.FaceAlpha = 'texturemap';
sCloud.AlphaData = max(clouds,[],3);
hold off
view([80 2]) 
daspect([1 1 1])
axis off tight

%
% The images used in this example are from Visible Earth.
% Credit: NASA Goddard Space Flight Center Image by Reto Stöckli (land surface, shallow water, clouds). Enhancements by Robert Simmon (ocean color, compositing, 3D globes, animation). Data and technical support: MODIS Land Group; MODIS Science Data Support Team; MODIS Atmosphere Group; MODIS Ocean Group Additional data: USGS EROS Data Center (topography); USGS Terrestrial Remote Sensing Flagstaff Field Center (Antarctica); Defense Meteorological Satellite Program (city lights).
%
% Copyright 2014 The MathWorks, Inc.