Здесь есть некоторая путаница.
OpenGL правша в пространстве объектов и в мировом пространстве.
Но в окнепробел (иначе экранное пространство) мы внезапно левша .
Как это произошло ?
То, как мы получаем от правой руки клевая - отрицательная запись масштабирования по z в матрицах проекций glOrtho
или glFrustum
.Масштабирование z на -1 (оставляя x и y без изменений) приводит к изменению управляемости системы координат.
Для glFrustum,
далеко и около должны быть положительными, с далеко > около .Скажите далеко = 1000 и около = 1.Тогда C = - (1001) / (999) = -1,002.
См. здесь для более подробной информации и диаграмм.
С с точки зрения орфографии , glOrtho генерирует такую матрицу:
Здесь слева , справа , снизу и top - это всего лишь координаты по вертикали , по вертикали , по горизонтали внизу , по горизонтали сверху плоскости отсечения (соответственно) .
Плоскости вблизи и далеко , однако указаны по-разному .Параметр near определяется как
- Near: расстояние до ближайшей плоскости отсечения глубины.Это расстояние является отрицательным, если плоскость должна находиться позади наблюдателя.
и дальний:
- zFar Расстояние до более глубокой плоскости отсечения глубины,Это расстояние отрицательно, если плоскость должна быть позади зрителя.
Здесь мы имеем типичный объем канонического обзора
Поскольку множитель zравно (-2 / (далеко)), знак минус эффективно масштабирует z на -1 .Это означает, что «z» поворачивается влево во время преобразования просмотра, без ведома большинства людей, поскольку они просто работают в OpenGL как «правосторонняя» система координат.
Итак, если выПозвоните
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
Тогда САМОЛЕТ ВСЕГО 10 единиц впереди вас .Где ты?Почему, в начале координат, с осью X справа от вас, осью Y на макушке головы, а нос направлен вниз на отрицательную ось Z (это значение по умолчанию "Попо умолчанию камера расположена в начале координат, направлена вниз по отрицательной оси z и имеет вектор повышения (0, 1, 0). ").Таким образом, ближняя плоскость находится в точке z = -10.Дальний самолет находится на расстоянии 10 единиц позади вас, при z = + 10 .