Для чего в OpenGL нужна функция glOrtho?

Правильно ли я понимаю что glOrtho может пересчитывать координаты? Я хочу разобрать эту часть кода:

glViewport(0,0,screenWidth, screenHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, screenWidth, 0, screenHeight, 0, 1);
glMatrixMode(GL_MODELVIEW);

После этого кода стало значения пикселей (X от 0 до windowWidth и Y от 0 до windowHeight). Но это не удобно для работы с 3D так? Наверное больше подходит для работы с 2D?


Ответы (2 шт):

Автор решения: Никита Самоуков

Это легаси. https://www.khronos.org/opengl/wiki/Legacy_OpenGL Нужна эта функция, чтобы старые программы продолжали работать.

→ Ссылка
Автор решения: eanmos

Когда вершины окажутся в пространстве вида, у них будет три пространственных координаты. Но экран у вас плоский, двумерный, и вы не можете взять и нарисовать трехмерную вершину на этом экране — вам нужно спроецировать эту трехмерную вершину на плоскость.

Мы можем сделать это самыми разными способами. Наиболее часто используют перспективную и ортографическую проекции.

Представьте себе рельсы. Они лежат параллельно друг другу. Но когда они находятся вдалеке, то нам кажется, что они пересекаются. Т. е. предметы, которые находятся далеко кажется нам меньше. Это перспективная проекция.

Ортографическая проекция работает иначе — она отображает каждую точку трехмерного пространства перпендикулярно плоскости. В частном случае, третья координата не учитывается и берутся просто координаты х и y вершин.

введите сюда описание изображения

Перспективная проекция больше подходит для трехмерной графики, компьютерных игр и так далее, потому что так мы видим в реальной жизни. Ортографическая проекция чаще всего применяется в различных CAD системах, при черчении, в инженерной графике…

Так вот функция glOrtho как раз и задает матрицу ортографической проекции. Т. е. ваши вершины из пространства вида будут спроецированы на плоскость с помощью ортографической проекции.


К слову говоря, вы используете старую версию OpenGL. В новых версиях в core profile матрицы проекций нужно задавать самостоятельно.

→ Ссылка