Немного предыстории
Я пишу простой трассировщик лучей на C++. У меня есть большая часть ядра, но я не понимаю, как получить мировую координату пикселя на плоскости изображения. Мне нужно это место, чтобы я мог бросить луч в мир.
В настоящее время у меня есть камера с позицией (также известной как моя перспективная точка отсчета), направление (вектор), которое не нормализовано. Длина направлений означает центр плоскости изображения и направление камеры.
Есть и другие значения, связанные с камерой, но они не должны иметь значения.
Координаты моего изображения будут варьироваться от -1 до 1, а перспектива (фокусное расстояние) будет меняться в зависимости от расстояния направления, связанного с камерой.
В чем мне нужна помощь
Мне нужно перейти от координат пикселей (скажем, [0, 256] в изображении по 256 пикселей с каждой стороны) к моим мировым координатам.
Я также хочу запрограммировать это так, чтобы независимо от того, где находится камера и куда она направлена, я мог найти пиксель в мировых координатах. (В настоящее время камера почти всегда будет центрирована в начале координат и будет смотреть вниз по отрицательной оси Z. Я хотел бы запрограммировать это с учетом будущих изменений.) Также важно знать, следует ли вставлять этот код в мою программу. также многопоточный код. В противном случае он будет рассчитан основным потоком, а затем луч будет использоваться в многопоточном коде.
(источник: in.tum.de)
Я не делал это изображение, и оно предназначено только для того, чтобы дать представление о том, что мне нужно.
Пожалуйста, оставьте комментарии, если вам нужна дополнительная информация. В противном случае мне нужен простой пример теории/кода, что делать.