Sto tentando di animare una sfera rotante in Matlab, tuttavia l'illuminazione della sfera ruota con essa. Io invece voglio che la sfera ruoti mentre l'illuminazione rimane fissa con il sistema di coordinate. Ecco un gif di ciò che il mio codice sta attualmente producendo: Animation. E qui è il mio codice:Illuminazione soggiorni con superficie animata in Matlab
% 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
Non sono sicuro di aver compreso la richiesta. Se una sfera gira attorno al suo centro e i colori (o l'effetto della luce) rimangono fermi, non c'è più animazione. A meno che non intendi che vuoi continenti e oceani, aggiunti in seguito, per girare? Altrimenti è necessario mantenere alcuni valori di colore ancora (= luce) e ruotare alcuni altri valori di colore (= continenti e oceani) e per ciascuna immagine che si convolgono (moltiplicare) entrambi. – Wli
@Wli La domanda sembra essere la seguente: "Perché l'oggetto luminoso impostato nel sistema di coordinate assoluto su [1 1 1]" sembra ruotare con la sfera, infatti ruotare è chiamato solo per l'oggetto sfera, non per l'oggetto luce ". Ho controllato la posizione della luce nel circuito, non cambia mai. Quindi, per il bene o per il male, sembra che Matlab non stia aggiornando gli effetti di luce dopo la chiamata a ruotare (che non è intuitiva). – CitizenInsane
Sembra che potrebbe essere un problema con la superficie 'VertexNormals' non si sta aggiornando. http://www.mathworks.co.uk/matlabcentral/fileexchange/35210-rotate-m-function-fixed – nkjt