如何在MATLAB中创建摄影机穿越效果?

如何在MATLAB中创建摄影机穿越效果?,matlab,animation,camera,matlab-figure,Matlab,Animation,Camera,Matlab Figure,我希望实现如中所示的飞越效果。首先,我使用surf函数从矩阵hm创建了一个图形,一个300X300矩阵: surf(hm); 然后,我从变量x、y和z定义了一条动画线,并在图中显示如下: curve = animatedline; curve.LineWidth = 6; curve.Color = [ 1 0 1]; for i = 1:length(x) addpoints(curve, x(i), y(i), z(i)); drawnow; end 然后,我想实现飞越效果,使

我希望实现如中所示的飞越效果。首先,我使用
surf
函数从矩阵
hm
创建了一个图形,一个300X300矩阵:

surf(hm); 
然后,我从变量
x
y
z
定义了一条动画线,并在图中显示如下:

curve = animatedline;
curve.LineWidth = 6;
curve.Color = [ 1 0 1];
for i = 1:length(x)
  addpoints(curve, x(i), y(i), z(i));
  drawnow;
end
然后,我想实现飞越效果,使相机沿直线移动。我尝试了上面示例中的代码片段,并对其进行了轻微修改:

for i = 1:length(x)
  campos([(x(i) -5), (y(i)-5), 0]);
  camtarget([x(i), y(i), z(i)]);
  drawnow;
end

但是相机没有像我想的那样移动。我做错了什么?

如果要模拟链接示例的行为,需要让摄影机目标和摄影机位置沿
(x,y,z)
定义的曲线移动。如上所述,摄影机目标沿曲线移动,但摄影机位置始终在
xy
平面上以
z=0
的位置偏移目标
(-5,-5)
。如果希望摄影机沿着目标后面的曲线移动,应尝试以下操作:

for iPoint = 6:numel(x)
  campos([x(iPoint-5) y(iPoint-5) z(iPoint-5)]);  % Note the index is shifted, not the value
  camtarget([x(iPoint) y(iPoint) z(iPoint)]);
  drawnow;
end
如果不希望摄影机沿同一条曲线移动,而是希望它始终位于与移动摄影机目标的固定偏移处,可以尝试以下操作:

offset = [-5 -5 0];  % X, Y, and Z offset from target
for iPoint = 1:numel(x)
  campos([x(iPoint)+offset(1) y(iPoint)+offset(2) z(iPoint)+offset(3)]);
  camtarget([x(iPoint) y(iPoint) z(iPoint)]);
  drawnow;
end

最后,如果要控制动画的速度,可以将命令替换为调用。请注意,在中,它将强制更新图形对象。您也可以使用动画制作图形,如我所示。

我尝试了您的建议,但相机的移动仍然与我的预期不同。我编辑了我的问题,并添加了带有动画线条的图形,以进一步解释我的意图。我试着让相机跟着线走,但有点落后。如果我能改变速度,让它慢慢移动,那就太好了。谢谢你的帮助@Newprogrammer:现在仍然有点不清楚你想要什么样的摄像机运动,但是我在我的答案中添加了另一个选项,以及如何控制速度。