проблема формулы проекции перспективы - PullRequest
0 голосов
/ 27 марта 2011

Я занимаюсь разработкой 3d флеш игры и у меня очень простой вопрос.

Как конвертировать 3d точку в 2d точку?

Я нашел следующую формулу в Интернете (камера находится в исходном положении)

  1. x '= x / z y' = y / z
  2. Соотношение = фокусное расстояние / (фокусная длина + z)
    х = х * соотношение
    у = у * соотношение

Но эти формулы дают мне странный результат, когда z меньше нуля (z <0) </p>

Мне нужна линия сборки от A (100 100 100) до B (100 100; -100) Как видите, эти уравнения дают действительно странный результат, когда я пытаюсь преобразовать точку B в двумерное измерение

Как я могу решить эту проблему?

1 Ответ

3 голосов
/ 28 марта 2011

Рассмотрим, что это значит, когда z = 0.Это означает, что вы делаете х / 0, что плохо - в этом случае это означает, что точка занимает ту же позицию, что и ваша камера!И когда z становится меньше, это означает, что точки идут за вашей камерой, поэтому вы не должны их отображать вообще.

Вы должны отбирать (не отображать) любые точки, которые находятся «за экраном».Выберите маленький z, чтобы он был вашей «ближней плоскостью», скажем, z = 1.Вы должны обрезать любую геометрию относительно этой плоскости z = 1, чтобы предотвратить неправильный рендеринг.

В случае точек, вы можете отметить point.z < 1.Для линий это более сложно - вы должны вычислить пересечение линии с плоскостью z = 1 и при необходимости обрезать ее.

Вы можете найти некоторую информацию об отсечении линии здесь .

...