绘图后防止相机重置

时间:2012-09-22 02:50:41

标签: matlab camera

我正在尝试使用trimesh为随时间变化的3d网格设置动画效果。在每次迭代中,我绘制网格。在一些迭代中,我也改变了相机的位置方向等。但是在绘图后相机会重置。我希望相机位置能够在进一步的迭代中保持固定。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果您在任何地方执行clfcla,那么也会清除轴的camera*属性。您必须保存这些并在每次迭代时重新设置它们:

g = [];
while ~done

    clf;

    ... %# generate mesh and other elements

    %# set previous Camera* properties
    if ~isempty(g)
        set(gca, g); end

    %# possibly adjust them for the current frame
    ...

    %# save all Camera* properties
    g.CameraPosition     = get(gca, 'CameraPosition');  
    g.CameraTarget       = get(gca, 'CameraTarget');    
    g.CameraUpVector     = get(gca, 'CameraUpVector');
    g.CameraUpVectorMode = get(gca, 'CameraUpVectorMode');
    g.CameraViewAngle    = get(gca, 'CameraViewAngle');

    %# Grab the current frame
    ...

end

或者,您可以将句柄保存到您创建的所有对象,并在每次迭代时删除它们。 AFAIK,这将保留轴的属性:

while ~done

    h(1) = trimesh(...)
    h(2) = patch(...)
    ...

    %# grab the frame
    ...

    %# delete all plot elements instead of clf/cla
    delete(h)

end

虽然没有测试过最后一个,所以你可能想先做一些实验。