3D координата 2D точки, данной камеру и плоскость представления

Я хочу генерировать лучи от камеры до плоскости просмотра. Чтобы сделать это, мне нужно мое положение камеры ("глаз"), право, и к векторам (где к вектор от камеры в направлении объекта, что камера выглядит на), и P, точка на плоскости просмотра. После того как у меня есть они, луч, это сгенерировано:

ray = camera_eye + t*(P-camera_eye);

где t является расстоянием вдоль луча (примите t = 1 на данный момент).

Мой вопрос, как я получаю 3D координаты точки P, учитывая, что это расположено в положении (я, j) на плоскости просмотра? Предположите, что левые верхние углы и правые нижние углы плоскости просмотра даны.

Примечание: Плоскость просмотра не является на самом деле плоскостью в том смысле, что она не расширяется бесконечно во всех направлениях. Скорее можно думать об этой плоскости как об изображении widthxheight. В направлении X диапазон 0-> ширина, и в направлении Y диапазон 0-> высота. Я хочу найти 3D координату (я, j) th элемент, 0

7
задан Myx 29 March 2010 в 15:48
поделиться

3 ответа

Когда я напрямую подключал предложенные формулы в свою программу, я не получал правильных результатов (возможно, нужно было выполнить некоторую отладку). Моя первоначальная проблема, по-видимому, заключалась в неправильном понимании координат (x,y,z) интерполирующих угловых точек. Я рассматривал координаты x,y,z отдельно, где не должен (и это может быть специфично для приложения, так как камера может быть ориентирована в любом направлении). Вместо этого решением оказалась простая интерполяция угловых точек плоскости просмотра:

  • интерполировать нижние угловые точки в направлении i, чтобы получить P1
  • интерполировать верхние угловые точки в направлении i, чтобы получить P2
  • интерполировать P1 и P2 в направлении j, чтобы получить мировые координаты конечной точки
0
ответ дан 7 December 2019 в 18:41
поделиться

Общее решение внутреннего сечения прямой и плоскости см. http://local.wasp.uwa.edu.au/~pbourke/geometry/planeline/

Ваша конкретная графическая библиотека (OpenGL / DirectcX и т. Д.) Может иметь стандартный способ сделать это

правка: вы пытаетесь найти трехмерное пересечение точки экрана (например, курсора мыши) с трехмерным объектом в вашей сцене. ?

2
ответ дан 7 December 2019 в 18:41
поделиться

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

  1. Масштабируем положение экрана в диапазоне -1 < x < +1 и -1 < y < +1, где +1 - верх/право, а -1 - низ/лево
  2. Масштабируем нормализованные x,y по размеру окна просмотра
  3. Масштабируем по векторам камеры вправо и вверх и суммируем результаты
  4. Добавляем вектор взгляда, масштабированный по расстоянию до плоскости обрезания

В итоге получаем:

p = at * near_clip_dist + x * right + y * up

где x и y:

x = (screen_x - screen_centre_x) / (width / 2) * view_width
y = (screen_y - screen_centre_y) / (height / 2) * view_height
0
ответ дан 7 December 2019 в 18:41
поделиться
Другие вопросы по тегам:

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