Перспективная проекция объекта на плоскость в 3D - PullRequest
2 голосов
/ 09 июля 2011

Представьте, что между виртуальным человеком и объектом существует плоскость.Объект представляет собой коробку с определенным масштабированием и поворотом XYZ.Самолет похож на стеклянное окно.Человек смотрит на объект через самолет.Камера смотрит на всю сцену под другим углом.

Я хотел бы нарисовать контур объекта на плоскости так, как его увидел бы человек, как если бы он рисовал на окне контуробъекта на другой стороне.

Как я могу преобразовать объект так, чтобы его вершины оказались на плоскости правильно?

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

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

Ответы [ 2 ]

1 голос
/ 22 февраля 2014
  1. Создание трехмерной системы координат с центром в глазах человека.Напишите функцию для преобразования точек из одной системы в другую.Вы также можете иметь другую систему, привязанную к объекту.Помните, что создание системы - это не что иное, как запись координат системы координат и осей в некоторой другой системе координат по умолчанию.Например: System_human_eye = {Point3f Origin (10, 0, 3), Xaxis (1, 0, 0), Yaxis (0, 1, 0), Zaxis (0, 0, 1)}

  2. В системе человеческого глаза найдите координаты вершин объекта и плоскости нормали.Уравнение плоскости p.normal = D, где D - расстояние до плоскости, p - точка плоскости, а нормаль - нормаль плоскости.Луч от человеческого глаза к вершине равен k * [x, y, z];при изменении k вы путешествуете вдоль луча.Все, что вам нужно сделать сейчас, это путешествовать вдоль луча, пока он не пересечет плоскость, то есть

    k * [x, y, z].нормальный = D;найти k, восстановить точку p = k * [x, y, z], и это даст вам пересечение луча с плоскостью;

  3. Преобразуйте все пересечения из человеческого глазасистема к системе камеры;

  4. Проецируйте эти координаты на экран, используя openGL или трассировку лучей.Поскольку прямые линии остаются прямыми после перспективной проекции, вы можете просто использовать их, если ваш объект состоит из линий.Поэтому все, что вам нужно, это спроецировать конечные точки линий и заново соединить их в виде линий на экране.
0 голосов
/ 09 июля 2011

В общем, вы хотите сделать перспективную проекцию .

Тем не менее, это включает в себя кусок теории и математики, которые вы должны обдумать. Если вы хотите сделать что-то более простое, для каждой вершины в вашем объекте просто вычислите линию, которая соединяет глаз с вершиной, а затем пересекайте ее с плоскостью.

...