Возможно, я ошибаюсь, но я не думаю, что вам здесь нужна какая-либо концепция плоскости изображения.Это всего лишь вопрос отображения положения пикселей на лучи.
Вы можете предположить, что у вас есть некоторая плоскость изображения, и вы делаете свою математику таким образом, но представьте, что вам нужен рендеринг "рыбий глаз" или 360 градусов - теперь вы можете 'Я не могу представить его в виде плоскости изображения, но все равно можно выполнить рендеринг.
Что вам нужно, так это способ преобразования положения пикселя (x, y) в луч (начало, направление), но так, как вы это делаете.это зависит от вас.Вы можете представить плоскость, разделить ее на пиксели и вычислить лучи, идущие от камеры к конкретному пикселю.Вы также можете предположить некоторую угловую дельту между одним пикселем и следующим, затем получить направление камеры и повернуть его для каждого пикселя.На самом деле второй подход должен быть лучше, потому что он позволяет избежать искажений, которые вы получаете при типичном 3D-рендеринге с большим Fov.С этим вторым подходом также возможно выполнять рендеринг с полями зрения, близкими или превышающими 180 градусов.
Это также одна из лучших вещей в трассировке лучей, у вас нет всех этих предположений о плоскостях отсечения, растеризациии весь конвейер GPU.Вы просто пишете код, который будет вычислять какое-то значение, в зависимости от того, как вы это делаете.
Если вы решите придерживаться image-plane, то вы, вероятно, знаете, что когда вы делаете эту плоскость в два раза большеи переместите его вдвое дальше, это должно дать вам тот же результат.Таким образом, ваша главная проблема здесь - это численные ошибкиТрудно дать какие-то конкретные цифры, так как они всегда «зависят», но я думаю, что расстояние в 1
, независимо от используемых вами единиц, является хорошим началом.