在Matlab中改进动画渲染

时间:2011-12-25 20:20:25

标签: matlab animation 3d

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

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
...

2 个答案:

答案 0 :(得分:1)

您是否考虑对数据而不是轴应用旋转变换矩阵? 我想&lt; 虽然我没有检查过它&gt;它可以加速你的代码。

答案 1 :(得分:1)

您已经使用了我用来加快速度的典型技巧,例如预先计算帧数,设置XDataYData而不是重新绘制,以及选择渲染器。以下是一些提示:

1)我在你的描述中注意到的一件事是,不同的渲染器和不同的复杂性改变了你的动画运行速度。这通常是不受欢迎的。考虑使用帧之间的实际间隔(即使用tic; dt = toc)来计算推进动画的距离,而不是依靠pause(0.2)来生成稳定的帧速率。

2)如果复杂性导致您的帧速率不合低,请考虑将pause(0.02)替换为drawnow,或者至少计算每帧暂停的时间。

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