Отображение экранных точек в 3D-реальное местоположение - PullRequest
1 голос
/ 31 марта 2012

Конкретное название того, что я пытаюсь сделать, это «unproject» =, чтобы отобразить точку экрана в трехмерном мире.

Итак, я нашел этот сайт с простыми уравнениями для отображения трехмерных координат на двухмерном экране:

http://www.petesqbsite.com/sections/tutorials/tuts/perspective.html

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

Вместо того, чтобы связывать 2D-координаты с трехмерными объектами, я хотел найти уравнение, которое отображает на экране точки с реальными. Я попытался выполнить обратное проектирование следующих 2 уравнений, чтобы попытаться найти ответ:

screenPoint.x = (int) ((eye.z * (realPoint.x-eye.x)) / (eye.z + realPoint.z) + eye.x);
screenPoint.y = 480 - (int) ((eye.z * (realPoint.y-eye.y)) / (eye.z + realPoint.z) + eye.y);

Однако мне не удалось (математически невозможно).

Любая помощь будет принята с благодарностью!

Спасибо!

1 Ответ

0 голосов
/ 16 марта 2013

У меня когда-то была похожая проблема. Я обнаружил поле зрения, используемое в opengl, и определил расстояние Z, при котором 1 пиксель на экране = 1 единица в opengl. Теперь, когда бы я ни указывал в любом месте экрана, у меня есть координаты X и Y мыши на экране и координата Z, которую я рассчитывал ранее на основе FOV. Теперь у меня есть определенная трехмерная координата. Затем я «нарисовал» воображаемую линию от камеры до этой точки и посмотрел, что произошло. Я знаю, что это не простой ответ, но то, что вы спрашиваете, невозможно. Вот способ сделать это с некоторыми хитростями

...