TheTalion
@TheTalion

Какой формулой определить где находится персонаж — за другим персонажем, перед, справа-слева и тд.?

В общем, есть персонаж (vector3), точка куда смотрит персонаж(vector3). Угол обзора(int).

Так же есть точка - второй персонаж(vector3). Нужно определить, где находится второй персонаж - за спиной персонажа или перед лицом?

Подскажите куда копать, какие формулы и тд.
  • Вопрос задан
  • 402 просмотра
Решения вопроса 2
Griboks
@Griboks Куратор тега C#
Проверить угол между векторами и, если вторая точка попадает в угол обзора, расстояние между точками. Собственно, вот и всё, осталось только вспомнить школьные формулы. Переписывать их сюда я конечно же не буду)
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
Считаем, что у нас FPS, т.е. есть некая абсолютная «горизонталь». Обычно в таких играх взгляд хранится через углы (yaw, pitch, roll).
Взад-вперёд: знак скалярного произведения двух векторов: единичного вектора взгляда без учёта тангажа (cos(yaw), sin(yaw)) и вектора на персонажа (x1−x0, y1−y0).
Влево-вправо: знак косого произведения той же пары векторов.
Вверх-вниз: и так понятно.
Все три в одних единицах, и у кого модуль больше, то и пишем: сверху, справа и т.д. Возможно, придётся сделать скидку на рост персонажей и их диаметр.

В играх типа Descent нет верха и низа, горизонтали и вертикали. Верх и низ есть только относительно кабины нашего аппарата, а взгляд хранится в виде ортонормированной матрицы, куска этой матрицы или кватерниона.
1) Скалярное произведение единичного 3D-вектора взгляда (обычно в таких играх хранится напрямую или считается через кватернион поворота) и 3D-вектора на персонажа.
2) Скалярное произведение единичного вектора, который смотрит вбок (если такой есть), и вектора на персонажа. Либо смешанное произведение единичного вектора взгляда, единичного вектора макушки и вектора на персонажа.
3) Скалярное произведение единичного вектора макушки и вектора на персонажа.

Смешанный случай — с переменным вектором гравитации (в глобальных авиасимуляторах или играх на астероидах) — распиши сам.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы