Как отобразить точки в 3D-плоскости на плоскость экрана - PullRequest
0 голосов
/ 11 октября 2011

Я дал задание для проецирования объекта в трехмерном пространстве на двухмерную плоскость с использованием простой графики на C. Вопрос состоит в том, что куб размещен в фиксированном трехмерном пространстве, и есть камера, которая находится в положении, ко- координаты x, y, z и камера смотрит на начало координат, то есть 0,0,0.Теперь мы должны спроецировать вершину куба на плоскость камеры.

Я продолжаю следующие шаги

Шаг 1: Я нахожу уравнение плоскости aX + bY + cZ + d =0, которое перпендикулярно линии, проведенной от положения камеры до начала координат.

Шаг 2: Я нахожу проекцию каждой вершины куба на плоскость, полученную на предыдущем шаге.

Теперь я хочу отобразить положение вершины, которое я получил проекцией в шаге 2 в плоскости aX + bY + cZ + d = 0, в мою плоскость экрана.

спасибо,

Я не думаю, что если координата z равна нулю, я приведу к фактическому отображению.Так что любая помощь, чтобы выяснить это.

1 Ответ

1 голос
/ 11 октября 2011

Вы можете сделать это в два простых шага:

  1. Перевести координаты куба в систему камеры (используя вращение), чтобы собственные координаты камеры в этой системе были x = y = z =0 и переведенные z куба равны> 0.
  2. Проецируйте координаты переведенного куба на 2d-плоскую, разделив его x и y на их соответствующие z (вам может потребоваться применить постоянный коэффициент масштабирования здесь для координатбыть разумным для экрана, например, не слишком маленьким и в пределах +/- половины высоты экрана в пикселях).Это создаст эффект перспективы.Теперь вы можете рисовать пиксели, используя эти разделенные x и y на экране, предполагая, что x = y = 0. Это центр.

Это в значительной степени то, как это делается в 3d играх.Если вы используете координаты вершины куба, то вы получаете проекции его сторон на экран.Затем вы можете полностью залить результирующие 2d фигуры или нанести на них текстуру.Но для этого вам нужно сначала выяснить, какие стороны не скрыты другими (если, конечно, вы не используете технику, называемую z-буферизацией).Это не нужно для простой демонстрации в виде каркаса, просто рисуйте прямые линии между проецируемыми вершинами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...