Main Content

了解视图投影

两种投影类型

MATLAB® 图形支持通过正交投影和透视投影两种类型来显示三维图形。具体选择哪一种取决于您要显示的图形类型:

  • orthographic 将观察体投影为矩形平行六面体(即相对的面互相平行的箱体)。与相机之间的相对距离不影响对象的大小。当需要保持对象的实际大小以及对象之间的角度时,这种投影方式非常有用。

  • perspective 将观察体投影为棱锥的截头锥体(平行于底部截掉头部的棱锥)。距离会产生前缩透视效果,距相机越远的对象越小。当您要显示真实对象的逼真视图时,这种投影方式非常有用。

默认情况下,MATLAB 使用正交投影方式来显示对象。您可以使用 camproj 命令设置投影类型。

下图显示了自卸车的绘图(使用 patch 创建)和数学函数的曲面图,二者都使用正交投影。

如果测量自卸车箱体前后面的宽度,您会发现二者相等。这张图看起来不自然,因为它缺少观察具有景深的真实对象时能够看到的明显透视效果。曲面图则能精确表示矩形空间内的函数值。

现在观察同样的图形对象在添加透视之后的效果。自卸车看起来自然多了,因为距离观察者较远的卡车部分看起来更小。这种投影模拟了人类视觉的工作原理。曲面图看起来则失真了。

投影类型和相机位置

默认情况下,MATLAB 会调整 CameraPositionCameraTargetCameraViewAngle 属性,使相机指向场景中心并包含坐标区内的所有图形对象。如果您放置的相机位置导致一些图形对象在相机后面,则显示的场景同时受到坐标区属性 Projection 和图窗属性 Renderer 的影响。下面总结了投影类型与渲染方法之间的相互影响。

 

正交

透视

OpenGL®

CameraViewAngle 决定 CameraTarget 处的场景范围。

CameraViewAngle 决定场景范围从 CameraPosition 到无穷远。

Painters

显示所有对象,无论 CameraPosition 如何。

如果图形对象位于 CameraPosition 后面,则不建议使用。

下图说明使用正交投影和 OpenGL 时您所看到的内容(灰色区域)。相机前面的所有对象都可见。

在透视投影中,您只能看到相机视角锥形区域内可见的对象。

Painters 渲染方法不太适合在三维空间移动相机,因为 MATLAB 不会沿观察轴进行裁剪。Painters 方法中的正交投影会使场景中包含的所有对象都可见,而不管相机在什么位置。

打印三维场景

上一节描述的效果可展现在硬拷贝输出中。您应该显式指定 opengl 打印,以获取屏幕上显示的效果(使用 print 命令的 -opengl 选项)。