Как подделать 2D спрайт, движущийся по оси Z? - PullRequest
4 голосов
/ 20 июля 2011

Я уточню свой вопрос, у меня есть 2D-объект, движущийся в 2D-мире (X, Y), и я хочу имитировать движение по оси Z. Поэтому я считаю, что лучше всего немного поэкспериментировать с его экстентом (шириной, высотой) и позицией. Но каково будет уравнение для определения нового экстента для объекта размером (w, h) и перемещения от камеры на 1 метр вперед (ось Z)? Каковы будут параметры такой функции?

Заранее спасибо за помощь.

Ответы [ 3 ]

6 голосов
/ 20 июля 2011

Используйте проекцию, сохраняя истинные (X,Y,Z) координаты объекта и отображая с камеры K единицы над плоскостью с помощью 2D-проекции (K*X/(Z+K),K*Y/(Z+K)), где +Z удаляется от камеры.

Чтобы изменить высоту и ширину, следуйте аналогичному шаблону с (DX,DY) истинным размером спрайта и (K*DX/(Z+K),K*DY/(Z+K)) видимым (нарисованным) размером.

Чтобы сделать это правильно, вы можете следовать советам из этого FlipCode статья.

2 голосов
/ 20 июля 2011

Основными параметрами будут расстояние до камеры и угол раскрытия.

Новый размер просто определить по new_size = size / distance. Обратите внимание, что объекты, которые не имеют расстояния, будут иметь бесконечный размер. Чтобы получить эффект от угла диафрагмы, вы хотели бы включить еще один фактор f: new_size = f * size / distance Где f - это расстояние от размера единицы. Расстояние от единицы измерения - это расстояние, на котором изображение будет нарисовано в его исходном размере. Конечно, это тоже не должно быть нулем. По этому расстоянию вы точно определяете угол апертуры.

Когда я говорю о размере, я имею в виду ширину и высоту, поэтому формула применяется к обоим.

Я надеюсь, что вы можете следовать моим объяснениям.

0 голосов
/ 20 июля 2011

Ширина и высота будут обратно пропорциональны расстоянию от зрителя. Если они вдвое дальше, размер будет вдвое меньше. Таким образом, если ваше «естественное» расстояние от зрителя равно A, а новая позиция - A + Z, вам нужно будет умножить исходную ширину и высоту на A / (A + Z). Это также работает для небольших отрицательных значений Z (объект ближе к зрителю и будет выглядеть больше).

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