2014-07-11 23 views
6

Tôi đang cố gắng tạo hiệu ứng một quả cầu quay trong Matlab, tuy nhiên ánh sáng trên quả cầu quay với nó. Thay vào đó, tôi muốn quả cầu xoay trong khi ánh sáng vẫn cố định với hệ tọa độ. Dưới đây là gif mã của tôi hiện đang sản xuất: Animation. Và đây là mã của tôi:Chiếu sáng với bề mặt hoạt hình trong 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 
+0

Tôi không chắc mình hiểu yêu cầu của bạn. Nếu một hình cầu quay xung quanh chính trung tâm của nó và màu sắc (hoặc hiệu ứng ánh sáng) vẫn còn, thì không còn hoạt hình nữa. Trừ khi bạn có nghĩa là bạn muốn châu lục và đại dương, thêm vào sau, để quay? Nếu không, bạn cần giữ một số giá trị màu vẫn còn (= ánh sáng) và xoay một số giá trị màu khác (= lục địa và đại dương) và cho mỗi hình ảnh bạn co giãn (nhân) cả hai. – Wli

+1

@Wli Câu hỏi có vẻ tốt hơn là: "Tại sao đối tượng ánh sáng được đặt trong hệ tọa độ tuyệt đối ở '[1 1 1]' có vẻ như xoay với hình cầu. Thực tế xoay được gọi chỉ cho đối tượng hình cầu chứ không phải đối tượng ánh sáng ". Tôi đã kiểm tra vị trí của ánh sáng trong vòng lặp, nó không bao giờ thay đổi. Vì vậy, đối với hàng hóa tốt hay xấu, có vẻ như MATLAB không cập nhật các hiệu ứng ánh sáng sau khi cuộc gọi quay (không trực quan). – CitizenInsane

+3

Dường như nó có thể là một vấn đề với bề mặt 'VertexNormals' không cập nhật. http://www.mathworks.co.uk/matlabcentral/fileexchange/35210-rotate-m-function-fixed – nkjt

Trả lời

1

Như đã đề cập trong các ý kiến:

Có vẻ như nó có thể là một vấn đề với các bề mặt VertexNormals không cập nhật.

Giải pháp là tải xuống bài nộp rotate.m function fixed File Exchange.

Mô tả:

Bug bằng chứng:

[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° 

Dường như ánh sáng đã di chuyển. Điều này là do lỗi trong chức năng xoay chiều. . Thuộc tính "VertexNormals" của đối tượng lướt sóng không phải là được cập nhật dưới dạng thuộc tính "xdata", "ydata" và "zdata".

Điều này được khắc phục trong phiên bản xoay vòng được gửi.m.

Các vấn đề liên quan