GluOrtho2D и glViewport

У меня есть объект, определенный в мировых координатах, например, окружность с центром в (2,3) с радиусом 4. Если я хочу, чтобы круг не искажался, чтобы быть полностью видимым в окне просмотра и быть как можно большим в окне просмотра, как я могу сформулировать команду gluOrtho2D для создания мирового окна на основе вышеупомянутых спецификаций, учитывая, что:

glViewport(20, 30, 1000, 500)?

Меня путают со всеми окнами viewport vs world vs screen и т.д. Может ли кто-нибудь пройти через меня? Я действительно хочу понять это.

Ответ 1

В вашем примере область просмотра составляет 1000 пикселей в высоту на 500 пикселей. Поэтому вам нужно указать координаты glOrtho, которые имеют одинаковое соотношение сторон (2: 1).

Ваш круг имеет 4 единицы в радиусе, поэтому вам нужно представление, которое должно быть 8 единиц на 8 единиц по крайней мере по крайней мере. Учитывая соотношение сторон 2: 1, сделайте ширину 16 единиц на 8 единиц.

Центр находится в точке (2, 3). Итак, центрируем эти 16 x 8 вокруг, которые вы должны получить:

glOrtho2D (2 - 8, 2 + 8, 3 - 4, 3 + 4);

То есть:

glOrtho2D (-6, 10, -1, 7);

Это эффективно отображает координату X -6 в левый край окна просмотра. Отображение glViewport затем отображает это в фактическое местоположение на экране. По мере изменения размера экрана вы должны скорректировать координаты glOrtho2D, чтобы компенсировать соотношение сторон, но пока область просмотра составляет 2: 1, эти вызовы glOrtho2D не нужно изменять.