如何在OpenGL中计算glOrtho的近平面和远平面

如何在OpenGL中计算glOrtho的近平面和远平面,opengl,Opengl,我正在为我的场景使用正交投影glOrtho。我实现了一个虚拟轨迹球来旋转旁边的对象,我还实现了视图矩阵的放大/缩小。假设我有一个大小为100单位的立方体,位于距离原点0,-40000,0的位置。如果用户旋转立方体并放大或缩小后,旋转中心位于原点,则它可能位于某个位置,其中0,025000该位置只是一个假设,并在乘以视图矩阵后计算。目前我定义了一个非常大的范围,即近150000和远150000平面,但有时对象仍然位于近平面或远平面之外,并且对象变得不可见,如果我定义一个更大的近平面和远平面,比如说

我正在为我的场景使用正交投影glOrtho。我实现了一个虚拟轨迹球来旋转旁边的对象,我还实现了视图矩阵的放大/缩小。假设我有一个大小为100单位的立方体,位于距离原点0,-40000,0的位置。如果用户旋转立方体并放大或缩小后,旋转中心位于原点,则它可能位于某个位置,其中0,025000该位置只是一个假设,并在乘以视图矩阵后计算。目前我定义了一个非常大的范围,即近150000和远150000平面,但有时对象仍然位于近平面或远平面之外,并且对象变得不可见,如果我定义一个更大的近平面和远平面,比如说-1000000和1000000,它将产生一个不规则的z伪影。所以我的问题是,当用户实时旋转对象时,如何正确计算近平面和远平面?提前谢谢

更新:
我已经为立方体实现了一个边界球体。我使用视图矩阵的逆矩阵来计算相机位置,并计算相机位置到边界球中心的距离。边界球的中心由视图矩阵变换。但我无法让它工作。你能进一步解释一下相机位置和近平面之间的关系吗

一种简单的方法是使用边界球体。如果知道数据边界框,则最大对角线长度是边界球体的直径。 假设您计算从摄影机位置到球体中心的距离“dCC”。让‘r’表示球体的半径。然后:
Near = dCC - r - smallMargin
Far = dCC + r + smallMargin
“smallMargin”是一个值,用于避免由于数值精度问题而在球体表面上剪切点。
球体的中心应为旋转中心。如果没有,则直径应增大以覆盖所有数据。

Ya,我已经为立方体实现了一个边界球体。我使用视图矩阵的逆矩阵来计算相机位置,并计算相机位置到边界球中心的距离。边界球的中心由视图矩阵变换。但我无法让它工作。你能进一步解释一下摄像机位置和近平面之间的关系吗?“近”和“远”是距离摄像机的距离。任何比“近”或“远”更近的都会被剪裁,而不会显示。可以在任何坐标系、视图或世界空间中计算这些距离。用你手边更多的那个。