Ich versuche, eine rotierende Kugel in Matlab zu animieren, aber die Beleuchtung auf der Kugel dreht sich damit. Ich möchte stattdessen, dass sich die Kugel dreht, während die Beleuchtung mit dem Koordinatensystem fixiert bleibt. Hier ist ein gif von dem, was mein Code gerade produziert: Animation. Und hier ist mein Code:Beleuchtung bleibt mit animierter Oberfläche 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
Ich bin mir nicht sicher, ob ich Ihre Anfrage verstehe. Wenn sich eine Kugel um ihre eigene Mitte dreht und die Farben (oder der Lichteffekt) still bleiben, dann gibt es keine Animation mehr. Wenn Sie nicht wollen, dass Sie Kontinente und Ozeane wollen, später hinzugefügt, um sich zu drehen? Andernfalls müssen Sie einige Farbwerte beibehalten (= hell) und einige andere Farbwerte (= Kontinente und Ozeane) drehen und für jedes Bild beide falten (multiplizieren). – Wli
@Wli Die Frage scheint besser zu sein: "Warum scheint das im absoluten Koordinatensystem bei '[1 1 1] gesetzte Lichtobjekt mit der Kugel zu rotieren. Tatsächlich wird Rotate nur für das Kugelobjekt, nicht für das Lichtobjekt genannt ". Ich habe die Position des Lichts in der Schleife überprüft, es ändert sich nie. Also, für das Gute oder für das Schlechte scheint es, dass Matlab die Lichteffekte nach dem Aufruf zum Drehen nicht aktualisiert (was nicht intuitiv ist). – CitizenInsane
Scheint, es könnte ein Problem mit der Oberfläche 'VertexNormals' nicht zu aktualisieren sein. http://www.mathworks.co.uk/matlabcentral/fileexchange/35210-rotate-m-function-fixed – nkjt