Освещение остается с анимированной поверхностью в Matlab
Я пытаюсь оживить вращающуюся сферу в Matlab, однако освещение на сфере вращается вместе с ней. Вместо этого я хочу, чтобы сфера вращалась, пока освещение остается фиксированным с системой координат. Вот gif того, что мой код в настоящее время производит: анимация. И вот мой код:
% 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
1 ответов
Как уже упоминалось в комментариях:
Кажется, что это может быть проблема с поверхностью
VertexNormals
не обновление.
решение было скачать поворот.функция M фиксированный обмен файлами представления.
описание:
ошибка доказательства:
[x,y,z] = sphere(20); hs=surf(x,y,z,'facecolor','y'); view(2) axis equal hl=light; lightangle(hl,0,0) % light is on -Y axis, thus at the % bottom rotate(hs,[0 0 1],30) % rotate sphere to the right from 30°
похоже, что свет переместился. Это связано с ошибкой в поворот.м функция. Свойство "VertexNormals" объект surf не является обновлены как свойства" xdata"," ydata "и" zdata".
это исправлено в представленной версии rotate.м.