Вам понадобится следующая информация:
r
: радиус ограничивающей сферы объекта
z
: расстояние от объекта до камеры
fovy
: вертикальное поле зрения (скажем, в градусах) камеры, как вы могли бы передать его gluPerspective
Сделайте небольшой набросок ситуации, найдите там прямоугольный треугольник и определите максимальный радиус сферы, который бы точно подходил. Учитывая приведенные выше параметры, вы должны найти r_max = z * sin(fovy*M_PI/180 / 2)
.
Исходя из этого, масштабный коэффициент равен r_max / r
.
Все это предполагает, что область просмотра шире, чем высока; в противном случае вы должны сначала получить fovx
и использовать его вместо fovy
.