Тут є певна плутанина.
OpenGL є правою рукою в об'єктному просторі та світовому просторі.
Але у віконному просторі (він же простір на екрані) ми раптом лівші .
Як це сталося ?
Шлях, який ми отримуємо від правші до лівші, - це від’ємний запис масштабування z в матрицях glOrtho
або glFrustum
проекції. Масштабування z на -1 (залишаючи x і y такими, якими вони були) впливає на зміну передачі системи координат.
Для glFrustum,
далеко і близько повинні бути позитивними, а далеко > близько . Скажімо далеко = 1000 і близько = 1. Тоді С = - (1001) / (999) = -1,002.
Дивіться тут для більш докладної інформації та діаграм.
З ортографічної точки зору glOrtho генерує матрицю, подібну до цієї:
Тут ліворуч , праворуч , знизу та зверху - лише координати для лівої вертикальної , правої вертикальної , нижньої горизонтальної , верхньої горизонтальної площин відсікання (відповідно) .
Однак ближній та далекий літаки вказані по-різному . Параметр ближнього визначається як
- Близько: відстань до ближчої глибини відсікання. Ця відстань від’ємна, якщо літак повинен знаходитись позаду оглядача.
і далеко:
- zFar Відстань до дальшої глибини відсікання. Ця відстань від’ємна, якщо літак повинен знаходитись позаду оглядача.
Тут ми маємо типовий обсяг канонічного перегляду
Оскільки множник z дорівнює (-2 / (далеко-близько)), знак мінуса ефективно масштабує z на -1 . Це означає, що "z" є повертається лівою рукою під час перегляду перегляду, невідомо для більшості людей, оскільки вони просто працюють у OpenGL як "праворука" система координат.
Отже, якщо зателефонувати
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
Тоді НАЙБЛІЖЧІШИЙ ПЛАВАНЬ на 10 одиниць попереду вас . Де ти? Чому, біля початку координат, з віссю х праворуч, віссю у верхній частині голови та носом, спрямованим до від’ємної осі z (це за замовчуванням "За замовчуванням камера розташована біля початку координат , спрямована вниз по від’ємній осі z і має вектор вгору (0, 1, 0). " ). Отже, ближня площина знаходиться при z = -10. Далекий літак знаходиться на 10 одиниць позаду вас, при z = + 10 .