我有一个OpenGL应用程序,实现了导航功能,如环绕、行走、平移、旋转等,用于在3D环境中导航。所有这些都能完美地工作,并且使用gluPerspective和gluLookAt设置起来相当简单。
glMatrixMode GL_PROJECTION
glLoadIdentity
gluPerspective m_ViewAngle, m_AspectRatio, m_ClipDistance_Near, m_ClipDistance_Far
glMatrixMode GL_MODELVIEW
glLoadIdentity
gluLookAt m_Eye.X, m_Eye.Y, m_Eye.Z, m_Focus.X, m_Focus.Y, m_Focus.Z, m_ViewUP.X, m_ViewUP.Y, m_ViewUP.Z
glCallList DisplayListIndex
类似于CAD软件中的典型“ZoomExtents”或“ZoomToFit”命令,从任意视点(视线方向),我希望能够缩放以便: (1) 整个3D环境可见,并且 (2) 3D环境模型填充整个视口(在当前视口大小下尽可能大)。
我知道环境边界框(极值XYZ)。然而,我无法推导出给定ViewAngle和AspectRatio以及环境极值的Eye和Focus位置应该是什么。
也许有一种比使用“gluLookAt”更容易实现这一目标的方法。感谢您的帮助!