Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lighting Stays with Animated Surface in Matlab

I'm attempting to animate a rotating sphere in Matlab, however the lighting on the sphere rotates with it. I instead want the sphere to rotate while the lighting remains fixed with the coordinate system. Here's a gif of what my code is currently producing: Animation. And here is my code:

% Simulation Time
dt = 0.05;
time = 0:dt:5;

% Prep Figure
figure('Color',[1 1 1],'Renderer','zbuffer','ColorMap', [1,0,0; 0,0,1])

% Generate Sphere
[X,Y,Z] = sphere(20);
r = 0.75*25.4;
h = surf(r*X,r*Y,r*Z,Z,'FaceColor','interp');
hold on

% Adjust Axes, Lighting, and Shading
axis equal
view([40 25]);
light('Position',[1 1 1])
set(findobj(gca,'type','surface'),...
            'FaceLighting','phong',...
            'AmbientStrength',.3,'DiffuseStrength',.8,...
            'SpecularStrength',.9,'SpecularExponent',25,...
            'BackFaceLighting','unlit','EdgeColor','k')

filename = 'Rotation.gif';
for n = 1:36

      rotate(h,[0 0 1],10,[0 0 0])
      im = frame2im(getframe(1));
      [imind,cm] = rgb2ind(im,256);

      if n == 1;
          imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',dt);
      else
          imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',dt);
      end

end
like image 947
joshchab Avatar asked Jul 11 '14 03:07

joshchab


1 Answers

As already mentioned in the comments:

Seems like it might be an issue with the surface VertexNormals not updating.

The solution was to download the rotate.m function fixed File Exchange submission.

The description:

Bug evidence:

[x,y,z] = sphere(20); 
hs=surf(x,y,z,'facecolor','y'); 
view(2) 
axis equal 
hl=light; 
lightangle(hl,0,0) 
% light is on -Y axis, thus at the 
% bottom 
rotate(hs,[0 0 1],30) 
% rotate sphere to the right from 30°

It looks like the light has moved. This is due to a bug in rotate.m function. The "VertexNormals" property of the surf object is not updated as "xdata", "ydata" and "zdata" properties are.

This is fixed in the submitted version of rotate.m.

like image 78
Dennis Jaheruddin Avatar answered Sep 19 '22 15:09

Dennis Jaheruddin