2014-07-11 25 views
6

Matlab'da dönen bir küre canlandırmaya çalışıyorum ancak küre üzerindeki ışık onunla birlikte dönüyor. Bunun yerine, aydınlatma koordinat sistemi ile sabit kalırken kürenin dönmesini istiyorum. İşte kodumun şu anda üretmekte olduğu bir gif: Animation.Matlab'da Animasyonlu Yüzeyli Aydınlatma Kaliteleri

% 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 
+0

Talebinizi anladığımdan emin değilim. Eğer bir küre kendi merkezinin etrafında dönüyorsa ve renkler (veya ışık etkisi) hala kalıyorsa, artık animasyon yoktur. Kıtalar ve okyanuslar, daha sonra eklenmek istediğiniz anlamına gelmezse, çevirmek? Aksi halde, bazı renk değerlerini hala (= ışık) tutmanız ve diğer bazı renk değerlerini (= kıtalar ve okyanuslar) ve her ikisini de (çoğaltır) ikiye katlamanız gerekir. – Wli

+1

@Wli Soru daha iyi görünüyor: "[1 1 1] 'deki mutlak koordinat sistemindeki ışık nesnesi küre ile birlikte dönüyor gibi görünüyor. Gerçekten döndürme, yalnızca nesne nesnesi için çağrılır, ışık nesnesi için değil ". Işığın konumunu döngüde kontrol ettim, asla değişmedi. Yani, iyi ya da kötü için, matlab, döndürme çağrısının (sezgisel olmayan) sonra ışık efektlerini güncellememesi gibi görünüyor. – CitizenInsane

+3

“VertexNormals” yüzeyinin güncellenmemesiyle ilgili bir sorun gibi görünüyor. http://www.mathworks.co.uk/matlabcentral/fileexchange/35210-rotate-m-function-fixed – nkjt

cevap

1

Daha önce yorum olarak bahsedilen: yüzeyden VertexNormals değil güncelleme ile ilgili bir sorun olabilir gibi

görünüyor Ve burada benim kodudur.

Bu çözüm, rotate.m function fixed File Exchange gönderimini karşıdan yüklemek idi.

açıklaması:

Hata kanıt:

ışık taşındı gibi görünüyor
[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° 

. Bu, rotate.m işlevindeki bir hatadan kaynaklanmaktadır. Sörf nesnesinin "VertexNormals" özelliği, "xdata", "ydata" ve "zdata" özellikleri olarak güncellenen değildir.

Bu, rotate.m'nin sunulan sürümünde giderilmiştir.