Ответы:
Да, чтобы назвать несколько:
Проекция Паннини, например, может захватывать широкие поля зрения в хороших отношениях . (полностью мое мнение)
Я думаю, что детали реализации будут выходить за рамки этого конкретного вопроса.
РЕДАКТИРОВАТЬ: Спасибо за комментарий, я сделал орфографическую ошибку Паннини. И чтобы сделать это редактирование полезным, вот еще несколько:
Это зависит от того, что вы подразумеваете под «тем, что можно использовать в трехмерной системе, такой как OpenGL». :)
Строго говоря, аппаратное обеспечение и API-интерфейсы для трехмерной графики, такие как OpenGL, корректно работают только с линейными проекциями - проекциями, которые отображают прямые линии в мировом пространстве на прямые линии на изображении. Они никогда не искажают что-либо в изогнутую форму (если только она не была изогнута). Это связано с тем, что графические процессоры зависят от треугольников, имеющих прямые края, чтобы правильно растеризовать их на экране.
Если мы ограничимся линейными проекциями, вариантов не так уж много. В дополнение к стандартным орто и перспективам, есть также «отклонения от центра», которые получаются путем сдвига усеченного вида.
Эти проекции можно представить с помощью обычной матрицы проекций 4 × 4 и без проблем использовать в 3D API.
Тогда есть нелинейные проекции, которые не имеют ограничения отображения прямых линий на прямые; им разрешено искажать вещи в кривые. Их много, в том числе цилиндрические, сферические, различные виды рыбий глаз и другие.
С нелинейными проекциями вы не можете просто использовать матрицу проекций; Вы должны как-то реализовать проекцию самостоятельно, используя шейдеры. Один из способов - написать собственный вершинный шейдер для проекции на каждую вершину. Графический процессор по-прежнему будет рисовать треугольник с прямыми линиями между вершинами, поэтому, хотя маленькие треугольники будут довольно близки к правильному, большие треугольники будут заметно неправильными. Это может вызвать проблемы , и для правильного рендеринга геометрия может потребовать очень тонкого разделения.
Второй подход к получению нелинейной проекции состоит в том, чтобы сначала визуализировать сцену с использованием обычной перспективной проекции (возможно, для кубической карты, у которой есть перспективная проекция для каждой грани куба), а затем применить пиксельный шейдер постобработки, чтобы повторно сэмплировать его до желаемой нелинейная проекция. Это имеет то преимущество, что не требует геометрических модификаций, но может быть более дорогим из-за дополнительной работы по рендерингу, и результат может быть размытым в некоторых областях, если рендер первого прохода не имеет достаточного разрешения. Пост-процессный подход используется в играх Oculus Rift, например, для реализации нелинейной проекции, необходимой Rift для работы со своими линзами.
Я не могу в это поверить, но никто не упомянул изометрическую проекцию, которая была довольно распространенной.