Lighting Stays with Surface in Animation
Mostra commenti meno recenti
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
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Lighting, Transparency, and Shading in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!