在Matlab中改进动画渲染

问题描述:

我写了一个代码来创建动画(satellite movement around the Earth)。当我运行它时,它工作正常。然而,当它被修改为Matlab GUI中更复杂的代码的一部分时,结果产生变化(主要是因为要绘制更多的点)。我也注意到,如果使用OpenGL渲染器,卫星的移动比使用其他渲染器(Painters和Zbuffer)时更快。我不知道是否有进一步的可能性来改善卫星运动的呈现。我认为关键是,也许,更改创建卫星(handles.psat)的实际位置的代码和它的轨迹沿着时间(handles.tray)在Matlab中改进动画渲染

handles.tray = zeros(1,Fin); 
handles.psat = line('parent',ah4,'XData',Y(1,1), 'YData',Y(1,2),... 
    'ZData',Y(1,3),'Marker','o', 'MarkerSize',10,'MarkerFaceColor','b'); 
... 
while (k<Fin) 
      az = az + 0.01745329252; 
      set(hgrot,'Matrix',makehgtform('zrotate',az)); 
      handles.tray(k) = line([Y(k-1,1) Y(k,1)],[Y(k-1,2) Y(k,2)],... 
       [Y(k-1,3) Y(k,3)],... 
     'Color','red','LineWidth',3); 
      set(handles.psat,'XData',Y(k,1),'YData',Y(k,2),'ZData',Y(k,3)); 
      pause(0.02); 
      k = k + 1; 

      if (state == 1) 
       state = 0; 
       break; 
      end 
      end 
... 

你有没有考虑到应用旋转变换矩阵在你的数据而不是轴?
我认为< 虽然我没有检查它>它可以加速你的代码。

您已经使用了我用来加快速度的典型技巧,如预先计算帧,设置XDataYData而不是重新绘制,然后选择渲染器。这里有一些更多的技巧,但:

1)我注意到你的描述中有一件事是不同的渲染器和不同的复杂性改变了你的动画看起来运行的速度。这通常是不可取的。考虑使用帧之间的实际间隔(即使用tic; dt = toc)来计算提前动画的距离,而不是依靠pause(0.2)来生成稳定的帧速率。 2)如果复杂度使得你的帧速率低得不合要求,考虑用drawnow代替pause(0.02),或者至少计算在每一帧上暂停的时间。

3)尝试通过测量各个步骤需要多长时间来进一步缩小瓶颈的来源。这将让您优化操作的正确阶段。