каковы фактические формулы для glOrtho - PullRequest
1 голос
/ 01 февраля 2020

Работая с устаревшим проектом, использующим OpenGL, и адаптируя его к OpenGL ES, я наткнулся на эту проблему. Я должен сам реализовать использование стека матриц и создать какой-то конечный автомат и собственную реализацию glOrtho и glPerspective, но некоторая документация отличается в зависимости от того, какой источник я смотрю.

Документация на веб-сайте Kronos искажена и непригодна для использования , Документация на сайте Microsoft

https://docs.microsoft.com/ru-ru/windows/win32/opengl/glortho?redirectedfrom=MSDN

Другая версия, которая также соответствует формулам на страницах руководства и в некоторых книгах:

https://lmb.informatik.uni-freiburg.de/people/reisert/opengl/doc/glOrtho.html

Эксперименты с glGelFloatv() показали, что на Windows glOrtho() используется первая версия. Возможно ли, что другие платформы используют другую? Было много проблем с матрицей проекций в этой кодовой базе, и попытка замены реализации усугубила то или иное, до такой степени, что у меня сложилось впечатление, что знак действительно меняется при некоторых условиях. Какой вариант я должен следовать? Содержит ли glOrtho некоторые дополнительные логики c помимо умножения существующей матрицы на новую?

1 Ответ

2 голосов
/ 01 февраля 2020

Единственная правда - спецификация. Из спецификации OpenGL 2.1 API - 2.11.2 Матрицы :

void Ortho( double l, double r, double b, double t, double n, double f );

описывает матрицу, которая производит параллельную проекцию. (lb - n) T и (rt - n) T задают точки на ближней плоскости отсечения, которые отображаются в нижнем левом и верхнем правом углах окна соответственно. f дает расстояние от глаза до дальней плоскости отсечения. Если l равно r, b равно t или n равно f, возникает ошибка INVALID VALUE. Соответствующая матрица:

enter image description here

(Самая последняя спецификация профиля совместимости API OpenGL 4.6 - 12.1 Преобразования вершин с фиксированной функцией говорит то же самое)

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