OpenGL:适合场景到屏幕

时间:2015-05-19 23:24:23

标签: c++ opengl math graphics glm-math

我有一个带有透视投影的3D场景。

我想根据边界框({​​{1}}和min)将场景放到屏幕上。

我的场景如下:

max

现在我需要一个比例因子来缩放我的rootNode以适应屏幕。 我该怎么做?

(这个:8.070 How can I automatically calculate a view that displays my entire model? (I know the bounding sphere and up vector.)无效,因为它基于正交投影)

1 个答案:

答案 0 :(得分:2)

透视投影比使用正交投影更难以解决这个问题的原因是您需要的minmax与透视投影不一致。

使用透视投影时,当您远离相机时,可见区域的任一边缘之间的距离会增加。

使用透视投影,您通常会有一个视角,theta,一个摄影机位置,以及一个"看着" vector,v。在距离相机位置d v的任何距离处,您可以想象一个法线为v的飞机。这个平面的区域,你的相机可以"看"有宽度:

2 * d * tan(theta / 2).

在简单的固定相机设置中,您可能将相机放在原点并向下看z轴,然后任何点的距离d都只是点{{1}坐标。

另请注意,您可能具有不同的水平和垂直视角。如果你设置了一个垂直的视角范围" fovy"和宽高比(视口宽度/视口高度)然后您的水平视角是您的垂直视角角度乘以宽高比。