Для достижения Fit-to-window для всех объектов в средстве просмотра, вы должны сначала знать экстенты всех объектов - xmin, xmax, ymin, ymax, zmin и zmax.Обычно ограничивающая сфера предварительно рассчитывается для всех отдельных объектов, и каждый раз, когда объект добавляется в средство просмотра, его ограничивающая сфера добавляется / включается в существующую глобальную ограничивающую сферу.Это означает, что изначально существует ограничивающая сфера для зрителя с радиусом, если 1, с центром в точке x0, y0 z0.Каждый раз, когда новый объект добавляется в средство просмотра, его предварительно рассчитанная ограничивающая сфера добавляется в средство просмотра.Под добавлением я подразумеваю обновление центра и радиуса исходной сферы так, чтобы она охватывала / содержала новую, и, таким образом, увеличивала глобальную для размещения новых сфер.Как только это будет сделано, всякий раз, когда пользователь выдает команду для подгонки, камера будет располагаться в центре сферы, а значения диапазона glOrtho будут обновляться до радиуса сферы.Обратите внимание, что при добавлении новых шперов центр глобальной сферы также будет меняться, так как объекты будут располагаться отдельно, и при добавлении их сфер будет получена новая сфера с большим радиусом и другим центром.Этот метод не дает точного соответствия в соответствии с различными проекциями вида (сверху, спереди, слева и т. Д.).Если вы хотите получить более точную посадку в разных проекциях, вам нужно иметь BoundingBox вместо сферы, но расчеты включают в себя множество проекций и вычислений смещения, и это более громоздко.