Непонимание функции gluOrtho2D

Я не могу понять, что делает функция gluOrtho2D()? Исправляет ли он начало координат в какой-то конкретной точке окна OpenGL или что-то еще?

Это потому, что gluOrtho2D(1,1,1,1) фиксирует начало координат в середине окна.

Если в какой-то момент он не фиксирует исходную точку, то есть ли способ исправить ее, потому что я прочитал, что не существует такой вещи, которая называется «Координаты окна OpenGL»?

Я читал, что gluOrtho2D(0,640,480,0) фиксирует начало координат в верхнем левом углу окна, но как мне узнать, где он смещается, если в качестве параметров отправляются другие значения?

Этот ответ может пригодиться
Ivanzinho 27.11.2020 18:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
1
4 844
2

Ответы 2

gluOrtho2D устанавливает матрицу Ортографическая проекция с заданными левым, правым, верхним и нижним, но фиксированными ближней и дальней плоскостями -1 соответственно 1.

gluOrtho2D( left, right, bottom, top );

Это значит, что

gluOrtho2D(0,640,480,0)

создает матрицу проекции, которая отображает 0 на левую границу области просмотра, 640 - на правую, 480 - на нижнюю и 0 - на верхнюю.

Значения left, right, bottom, top, near и far определяют поле. Вся геометрия, которая находится внутри объема бокса, «видна» в окне просмотра.


Матрица проекции описывает сопоставление трехмерных точек сцены с двухмерными точками области просмотра. Он преобразуется из пространства глаз в пространство клипа, а координаты в пространстве клипа преобразуются в нормализованные координаты устройства (NDC) путем деления на компонент w координат клипа. NDC находятся в диапазоне от (-1, -1, -1) до (1,1,1) .
Каждая геометрия, выходящая за пределы области отсечения, обрезается.

В ортогональной проекции координаты в пространстве глаз линейно отображаются в нормализованные координаты устройства, а координаты пространства клипа равны нормализованным координатам устройства, потому что компонент w равен 1 (для Декартова координата).

Матрица ортогональной проекции:

r = right, l = left, b = bottom, t = top, n = near, f = far 

2/(r-l)         0               0               0
0               2/(t-b)         0               0
0               0               -2/(f-n)        0
-(r+l)/(r-l)    -(t+b)/(t-b)    -(f+n)/(f-n)    1

В дополнение к @ Rabbid76 ответ:

This is because gluOrtho2D(1,1,1,1) fixes the origin at the middle of the window.

Нет. gluOrtho2D(1,1,1,1) этого не делает. Он генерирует ошибку GL_INVALID_VALUE и оставляет текущую матрицу нетронутой. Не разрешается устанавливать left=right или top=bottom, так как это не имеет никакого геометрического смысла, а также приведет к делению на ноль в матрице.

Поскольку у вас, скорее всего, есть матрица идентичности, загруженная в стек матриц перед вызовом gluOrtho2D, в конечном итоге вы получите просто матрицу идентичности, что означает, что ваш объем просмотра представляет собой выровненный по оси куб -1 <= x, y, z <= 1.

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