gluOrtho2D и glViewport - PullRequest
       33

gluOrtho2D и glViewport

13 голосов
/ 20 января 2010

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

glViewport(20, 30, 1000, 500)?

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

1 Ответ

27 голосов
/ 20 января 2010

В вашем примере область просмотра имеет ширину 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 изменять не нужно.

...