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