Как перевести 3D в 2D? Привет.
У меня есть координаты объекта в игре, представим A(x, y, z);
Есть координаты где стоит игрок B(x, y, z);
Есть координаты куда игрок смотрит C(x, y, z);
Исходя из этих данных мне нужно получить точку на мониторе 2D где находится объект, т.е. перевести все эти 3D координаты в 2D. Как это можно сделать? Размер экрана если что статический, 640x480

21 Авг 2019 в 06:06
184 +1
0
Ответы
1

Для перевода 3D координаты объекта в 2D точку на экране, можно использовать проекцию. Одним из способов проецирования является перспективная проекция.

Для этого нужно сначала найти вектор направления, в котором смотрит игрок, который можно вычислить как разность векторов C - B. Затем нужно нормализовать этот вектор.

Далее можно найти вектор от игрока к объекту, который равен разности векторов A - B. Нормализуем также этот вектор.

Теперь можно использовать уравнение перспективной проекции для нахождения координат на экране:

x_screen = (f x) / z
y_screen = (f y) / z

Где f - фокусное расстояние (можно подобрать экспериментально), x и y - координаты объекта относительно игрока, z - расстояние от игрока до объекта.

Например, если объект находится на расстоянии 10 единиц от игрока, то z = 10. Подставляя все значения, можно получить x_screen и y_screen - координаты объекта на экране.

Помните, что в вашем случае размер экрана статический (640x480), поэтому координаты объекта на экране не должны превышать этих значений.

Надеюсь, данная информация поможет вам решить задачу. Удачи!

20 Апр в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 93 377 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир