gluOrtho2D и glViewport

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

glViewport(20, 30, 1000, 500)?

Я запутываюсь с целым окном просмотра и мира с экраном и т. Д. Координатами. Может ли кто-нибудь провести меня через это? Я действительно хочу научиться этому.

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 не нужно будет изменять.

Другие вопросы по тегам