了解视图投影
两种投影类型
MATLAB® 图形支持通过正交投影和透视投影两种类型来显示三维图形。具体选择哪一种取决于您要显示的图形类型:
orthographic
将观察体投影为矩形平行六面体(即相对的面互相平行的箱体)。与相机之间的相对距离不影响对象的大小。当需要保持对象的实际大小以及对象之间的角度时,这种投影方式非常有用。perspective
将观察体投影为棱锥的截头锥体(平行于底部截掉头部的棱锥)。距离会产生前缩透视效果,距相机越远的对象越小。当您要显示真实对象的逼真视图时,这种投影方式非常有用。
默认情况下,MATLAB 使用正交投影方式来显示对象。您可以使用 camproj
命令设置投影类型。
下图显示了自卸车的绘图(使用 patch
创建)和数学函数的曲面图,二者都使用正交投影。
如果测量自卸车箱体前后面的宽度,您会发现二者相等。这张图看起来不自然,因为它缺少观察具有景深的真实对象时能够看到的明显透视效果。曲面图则能精确表示矩形空间内的函数值。
现在观察同样的图形对象在添加透视之后的效果。自卸车看起来自然多了,因为距离观察者较远的卡车部分看起来更小。这种投影模拟了人类视觉的工作原理。曲面图看起来则失真了。
投影类型和相机位置
默认情况下,MATLAB 会调整 CameraPosition
、CameraTarget
和 CameraViewAngle
属性,使相机指向场景中心并包含坐标区内的所有图形对象。如果您放置的相机位置导致一些图形对象在相机后面,则显示的场景同时受到坐标区属性 Projection
和图窗属性 Renderer
的影响。下面总结了投影类型与渲染方法之间的相互影响。
正交 | 透视 | |
---|---|---|
OpenGL® |
|
|
Painters | 显示所有对象,无论 | 如果图形对象位于 |
下图说明使用正交投影和 OpenGL 时您所看到的内容(灰色区域)。相机前面的所有对象都可见。
在透视投影中,您只能看到相机视角锥形区域内可见的对象。
Painters 渲染方法不太适合在三维空间移动相机,因为 MATLAB 不会沿观察轴进行裁剪。Painters 方法中的正交投影会使场景中包含的所有对象都可见,而不管相机在什么位置。
打印三维场景
上一节描述的效果可展现在硬拷贝输出中。您应该显式指定 opengl 打印,以获取屏幕上显示的效果(使用 print
命令的 -opengl
选项)。