我正在构建一个具有两种视图模式的小型形状编辑器:正交视图和透视视图。所以我发现它会很好,如果透视和正交的缩放值相等(或尽可能相等)。
通过设置 z 轴上的位置,可以简单地归档透视图的缩放值。对于正交,我将左、右、上和下角从 0.0 缩放到 X。
是否可以同样缩放它们?有解决办法吗?
我将相等的缩放值解释为形状在每种缩放模式下看起来都是相同的大小。由于从透视角度来看,形状部分的表观大小将取决于它们与相机的距离,因此这种“等变焦”只能在形状内的特定深度处实现。
假设您希望最接近相机的形状部分在两种视图模式中看起来相等。
要从透视图生成等效的正交视图,首先计算形状最近点处的视锥体的宽度和高度。
width = tan(fovX) * distance
height = tan (fovY) * distance
其中distance
是从相机到形状上最近点的距离,是fovX, fovY
透视模式下视野的水平和垂直角度。
然后,您可以将正交视图矩形设置为0,0,width,height
,假设您将相机置于形状的中心。
要从正交视图生成等效透视图,只需反转等式:
distance = width / tan(fovX)
或者
distance = height / tan(fovY)
然后将相机的 z 值设置为对象上最近的点 - distance
,假设您正在向下看正 z 轴。如果您的相机始终在原点,您可以设置对象的 z 值,使其最近点的 z 值等于距离。