%% Displaying Complex Three-Dimensional Objects
% This example shows how to create and display a complex three dimensional object and control its appearance.
%
%% Get Geometry of Object
% This example uses a graphics object called the Newell teapot. The vertex, face, and color index data for the teapot are calculated by the teapotData function. Since the teapot is a complex geometric shape, there are a large number of vertices (4608) and faces (3872) returned by the function.

[verts, faces, cindex] = teapotGeometry;

%
%% Create Teapot Patch Object
% Using the geometry data, draw the teapot using the patch command. The patch command creates a patch object.

figure
p = patch('Faces',faces,'Vertices',verts,'FaceVertexCData',cindex,'FaceColor','interp')

%
% Use the view command to change the orientation of the object.

view(-151,30)     % change the orientation
axis equal off    % make the axes equal and invisible

%
%% Adjust Transparency
% Make the object transparent using the FaceAlpha property of the patch object.

p.FaceAlpha = 0.3;   % make the object semi-transparent

%
% If the FaceColor property is set to 'none', then the object appears as a wire frame diagram.

p.FaceColor = 'none';    % turn off the colors

%
%% Change Colormap
% Change the colors for the object using the colormap function.

p.FaceAlpha = 1;           % remove the transparency
p.FaceColor = 'interp';    % set the face colors to be interpolated
p.LineStyle = 'none';      % remove the lines
colormap(copper)           % change the colormap

%
%% Light the Object
% Add a light to make the object appear more realistic.

l = light('Position',[-0.4 0.2 0.9],'Style','infinite')
lighting gouraud

%
% These properties of the patch object affect the strength of the light and the reflective properties of the object:
% AmbientStrength - controls the strength of ambient light
% DiffuseStrength - controls the strength of diffuse light
% SpecularStrength - controls the strength of reflected light
% SpecularExponent - controls the harshness of reflected light
% SpecularColorReflectance - controls how reflected color is calculated.
% You can set these properties individually. To set these properties to a predetermined set of values that approximate the appearance of metal, shiny, or dull material, use the material command.

material shiny

%
% Adjust the position of the light using its Position property. The position is in x, y, z coordinates.

l.Position = [-0.1 0.6 0.8]

%
% Copyright 2014 The MathWorks, Inc.