Как найти мировые координаты пикселя на плоскости изображения?

Немного предыстории

Я пишу простой трассировщик лучей на C++. У меня есть большая часть ядра, но я не понимаю, как получить мировую координату пикселя на плоскости изображения. Мне нужно это место, чтобы я мог бросить луч в мир.

В настоящее время у меня есть камера с позицией (также известной как моя перспективная точка отсчета), направление (вектор), которое не нормализовано. Длина направлений означает центр плоскости изображения и направление камеры.

Есть и другие значения, связанные с камерой, но они не должны иметь значения.

Координаты моего изображения будут варьироваться от -1 до 1, а перспектива (фокусное расстояние) будет меняться в зависимости от расстояния направления, связанного с камерой.

В чем мне нужна помощь

Мне нужно перейти от координат пикселей (скажем, [0, 256] в изображении по 256 пикселей с каждой стороны) к моим мировым координатам.

Я также хочу запрограммировать это так, чтобы независимо от того, где находится камера и куда она направлена, я мог найти пиксель в мировых координатах. (В настоящее время камера почти всегда будет центрирована в начале координат и будет смотреть вниз по отрицательной оси Z. Я хотел бы запрограммировать это с учетом будущих изменений.) Также важно знать, следует ли вставлять этот код в мою программу. также многопоточный код. В противном случае он будет рассчитан основным потоком, а затем луч будет использоваться в многопоточном коде.

Пример общей идеи
(источник: in.tum.de)

Я не делал это изображение, и оно предназначено только для того, чтобы дать представление о том, что мне нужно.

Пожалуйста, оставьте комментарии, если вам нужна дополнительная информация. В противном случае мне нужен простой пример теории/кода, что делать.


person Tyler Scott    schedule 06.10.2013    source источник
comment
Это может помочь nehe.gamedev.net/article/using_gluunproject/16013 sites.google.com/site/vamsikrishnav/gluunproject   -  person GizmoThunder    schedule 06.10.2013


Ответы (1)