我有以下Matlab代码,用于创建gif和avi动画;
Matlab imwrite
用于创建gif的帧;但我发现lighting
命令对于成功获取动画gif非常重要。
close all
clear all
clc; %
nFrames = 50;
% Preallocate movie structure.
mov(1:nFrames) = struct('cdata', [],'colormap', []);
% Create movie.
figure('color','white');
Z = peaks(150); surf(Z,Z,'edgecolor','none');
view(3);
axis vis3d tight equal off;
v = axis;
%
for k = 1:nFrames
clf;
surf(1.5*sin(2*pi*k/20)*Z,Z,'edgecolor','none');
axis(v);
axis off
camlight;
lighting phong
mov(k) = getframe;
[Inx,cmap]=rgb2ind(mov(k).cdata,256);
if k==1
imwrite(Inx,cmap,'testoutx.gif','gif','DelayTime',0.25,'LoopCount',Inf) %
else
imwrite(Inx,cmap,'testoutx.gif','gif','WriteMode','append','DelayTime',0.25) %
end
end
% Create AVI file.
movie2avi(mov, 'myPeaks.avi', 'compression', 'None');
当我评论"照明phong"时,获得的gif是静态的,而不是动画的。似乎只存储了一个帧。我还尝试在每个drawnow
句子之前使用getframe
,但这不起作用。为什么?如何在不使用lighting
的情况下解决问题?
所需的gif(从上面的代码中获得):
不受欢迎的带有"照明phong"评论: