То, о чем вы спрашиваете, не является теоретически невозможным само по себе, но, по крайней мере, теоретически интересно.
Что происходит с физической камерой, когда вы увеличиваете поле зрения? Чем шире он становится, тем более "рыбий глаз" выглядит. Матрица проекции и перспективное деление конвейера трехмерной графики, такого как SceneKit, работают аналогичным образом. Это выглядит немного иначе, потому что это прямолинейное преобразование, а не эффект сферической линзы, но это та же самая общая идея - он отображает объем (называемый усеченной вершиной) трехмерного пространства, «видимого» камерой, на плоскость просмотра. Это общий аспект 3D-графики, а не что-то конкретное для SceneKit, поэтому вы можете найти множество хорошие учебные пособия, которые довольно хорошо охватывают базовую математику.
Эта усеченная проекция фиксирует определенную взаимосвязь между величиной угла обзора, который что-то занимает, и его шириной в плоскости просмотра. Вы не можете действительно изменить это соотношение и при этом иметь линейное (ну, рациональное, но в основном линейное) преобразование, которое 3D-оборудование может применять с одним умножением матрицы (и делением перспективы).
Теоретически вы можете определить другое соотношение - скажем, такое, при котором большой угловой размер соответствует гораздо большей части плоскости обзора около центра обзора, но гораздо меньшей части дальше от центра. Но вы не можете сделать это в преобразовании камеры ... Такие вычисления придется выполнять попиксельно в какой-то шейдер постобработки. (Фактически, это обычно то, как рендеринг для линз VR-гарнитуры работает.)
person
rickster
schedule
10.05.2016