какова фактическая разница между gluortho2d и glViewport - PullRequest
3 голосов
/ 17 декабря 2009

Я сделал окно размером 800x600. Я позвонил

gluOrtho2D(-400,400,-300,300);
glViewport(400,300,400,300);

и я нарисовал линию от (-100,-100) до (100,100). Я думаю, что должен увидеть строку от (0,0) до (100,100), но я получаю всю строку. Почему это?

Ответы [ 2 ]

10 голосов
/ 17 декабря 2009

Теоретически, glViewport не вызывает отсечения (см. Раздел 10) . Обычно весь рисунок обрезается до окна. Так как вы попросили OpenGL рисовать в области вашего окна, вам также нужно указать OpenGL обрезать координаты за пределами этого окна просмотра. Для этого вам понадобится glScissor. Тем не менее, некоторые реализации закрепляют свои рисунки в окне просмотра (подробности см. В моем комментарии).

Кроме того, ваша математика неверна. Ваша матрица проекции имеет ширину 800 единиц и высоту 600 единиц с центром в (0, 0). Затем он сопоставляется с частью окна шириной 400 пикселей и высотой 300 пикселей в правом верхнем углу окна.

Если вы нарисуете линию от (-100, -100) до (100, 100), она будет распространяться только на небольшую часть вашей области просмотра. Размер усеченного бруса соответствует размеру окна просмотра.

На изображении синее поле представляет собой окно, а красное поле представляет область просмотра. Черная линия должна быть линией, которую вы нарисовали.

Изображение, описывающее, что говорится в абзаце. http://img696.imageshack.us/img696/6541/opengl.png

Надеюсь, это поможет!

0 голосов
/ 18 декабря 2009

glViewport описывает область вашего окна, которая будет нарисована OpenGL. glOrtho или gluOrtho2D определяют систему единиц (единицы OpenGL), которые вписываются в эту (через определенную glViewport) область. Таким образом, ваша линия будет проведена в области просмотра от -100, -100 до 100,100

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...