我有一个 OpenGL 应用程序,它实现了用于导航 3D 环境的导航功能,例如 Orbit、Walk、Pan、Rotate 等。所有这些都完美无缺,使用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,最大 XYZ)。但是,对于给定的 ViewAngle 和 AspectRatio 以及环境范围,我无法得出眼睛和焦点位置应该是什么。
也许有比使用gluLookAt更简单的方法来实现这一点。任何帮助表示赞赏!