Lighting Stays with Surface in Animation

19 visualizaciones (últimos 30 días)
Josh
Josh el 11 de Jul. de 2014
Editada: Josh el 11 de Jul. de 2014
I'm attempting to animate a rotating sphere, however the lighting on the sphere rotates with it in certain situations. I instead want the the lighting to remain fixed with the coordinate system while the sphere rotates. Here's a gif of what my code is currently producing: Animation . Below is the code I used to produce the animation. The weird thing is this only happens with rotations about the z-axis. As can be seen in the animation, the lighting works fine for x-axis rotation.
% 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 off
axis equal
view([40 25]);
lgt = 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
for n = 1:36
rotate(h,[1 0 0],10,[0 0 0])
im = frame2im(getframe(1));
[imind,cm] = rgb2ind(im,256);
imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',dt);
end

Respuesta aceptada

Josh
Josh el 11 de Jul. de 2014
Editada: Josh el 11 de Jul. de 2014
I've found a solution to this problem thanks to the folks over at stackoverflow. The issue is caused by the surface VertexNormals not updating properly in the rotation function. This updated rotation function solves the issue:

Más respuestas (0)

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by