Перспективная проекция: определите 2D координаты экрана (x, y) точек в 3D пространстве (x, y, z)

Я хочу определить 2D координаты экрана (x, y) точек в 3D пространстве (x, y, z).

Точки, которые я хочу спроектировать, являются реальными точками, представленными координатами GPS и повышением над уровнем моря.

Например: Точка (Lat:49.291882, Long:-123.131676, Высота: 14 м)

Положение камеры и высота могут также быть определены как x, y, z точка. У меня также есть заголовок камеры (градусы компаса), его степень наклона (выше/ниже горизонта) и список (вокруг оси z).

У меня нет опыта 3D программирования, поэтому, я читал вокруг предмета перспективной проекции и узнал, что это требует знания матриц, преобразования и т.д. - все из которых полностью смущают меня в настоящее время.

Мне сказали, что OpenGL может быть полезным, чтобы создать 3D модель реальных точек, настроить ориентацию камеры и получить 2D координаты 3D точек.

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

Кто-то мог предложить, чтобы лучший метод решил мою проблему? Если бы OpenGL является выполнимым решением, я должен был бы использовать OpenGL ES, если это имеет какое-либо значение. О, и безотносительно решения я выбираю, оно должно выполниться быстро.

14
задан G M 15 August 2019 в 13:41
поделиться

4 ответа

Вот очень общий ответ. Скажите камеру в (Xc, Yc, Zc) и точка, которую Вы хотите спроектировать, P = (X, Y, Z). Расстояние от камеры до 2D плоскости, на которую Вы проектируете, является F (таким образом, уравнение плоскости Z-Zc=F). 2D координаты P, спроектированного на плоскость, (X', Y').

Затем очень просто:

X' = ((X - Xc) * (F/Z)) + Xc

Y' = ((Y - Yc) * (F/Z)) + Yc

Если Ваша камера является источником, то это упрощает до:

X' = X * (F/Z)

Y' = Y * (F/Z)

13
ответ дан 1 December 2019 в 12:53
поделиться

Если просто должен вычислить координаты некоторых точек, необходимо только быть нужны некоторые навыки алгебры, не 3D программирование с openGL.

Кроме того, openGL не имеет дело с Географическими координатами

Сначала получите некоторый документ о WGS84 и геодезических координатах, необходимо сначала преобразовать данные GPS в декартов кадр (например, земля центральный декартов кадр, в котором определяется эллипсоид WGS84).

Затем вычисления с матрицей могут произойти. Цепочка преобразований примерно:

  • WGS84
  • заземлите центральные координаты
  • некоторый локальный кадр
  • кадр камеры
  • 2D проекция

Поскольку первое преобразование видит это, последнее включает матрицу проекции, Другие - только вращения координат и перевод. "Некоторый локальный кадр" является локальным декартовым кадром с источником как Ваша касательная местоположения камеры к эллипсоиду.

2
ответ дан 1 December 2019 в 12:53
поделиться

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

Используя OpenGL, вероятно, сохранил бы Вас большая работа по прокрутке Вашего собственного растрирующего процессора программного обеспечения. Так, я советовал бы пробовать его сначала. Можно моделировать систему на ПК начиная с OpenGL, ES не слишком отличается, пока Вы сохраняете это простым.

4
ответ дан 1 December 2019 в 12:53
поделиться

Я рекомендовал бы "Математику для 3D Игрового Программирования и Компьютерной графики" Eric Lengyel. Это покрывает матрицы, преобразования, представление frustum, перспективную проекцию и т.д.

Существует также хорошая глава в Руководстве по программированию OpenGL (красная книга) на преобразованиях для просмотра и установке камеры (включая то, как использовать gluLookAt).

Если Вы не интересуетесь отображением 3D сцены и ограничены использованием OpenGL ES затем, может быть лучше просто написать Ваш собственный код, чтобы сделать отображение от 3D до 2D проводов окна. Как начальная точка Вы могли загрузить 3D Мезаструктуру, реализация с открытым исходным кодом OpenGL, чтобы видеть, как они реализуют gluPerspective (для установки матрицы проекции), gluLookAt (для установки преобразования камеры) и gluProject (для проектирования 3D точки к 2D проводам окна).

2
ответ дан 1 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: