Как показывает предыдущий ответ, сохранение вектора вверх, вперед и вправо является хорошим способом определения (евклидова) координатного пространства. Еще лучше, если вы добавите источник, так как вы можете представлять более широкий диапазон пробелов.
Допустим, у нас есть два пробела A и B, в A, вверх, вперед и вправо (0,1,0), (0,0,1) и (1,0,0) соответственно, а начало координат в нуле это дает обычные левосторонние координаты xyz для A. Скажем, для B мы имеем u = (ux, uy, uz), f = (fx, fy, fz) и r = (rx, ry, rz) с Происхождение o = (бык, оу, унция). Тогда для точки в точке p = (x, y, z) в B имеем в A (x * rx + y * ux + z * fx + ox, x * ry + y * uy + z * fy + oy, x * rz + y * uz + z * fz + oz).
Это может быть достигнуто инспекцией. Заметим, что, поскольку правый, верхний и прямой векторы для B имеют компоненты на каждой оси A, компонент некоторых координат в B должен вносить вклад во все три компонента координат в A. то есть, поскольку (0,1,0) в B равно (ux, uy, uz), тогда (x, y, z) = y * u + (некоторые другие вещи). Если мы сделаем это для каждой координаты, то получим (x, y, z) = x * r + y * u + z * f + (некоторые другие вещи). Если мы сделаем наблюдение, что в начале эти термины исчезают, за исключением (некоторого другого материала), то мы понимаем, что (некоторый другой материал) должен фактически быть o, что дает координаты в A как x * r + y * u + z * f + o, то есть (x * rx + y * ux + z * fx + ox, x * ry + y * uy + z * fy + oy, x * rz + y * uz + z * fz + oz ) после расширения векторных операций.
Эта операция также может быть отменена, мы просто устанавливаем координаты в A и решаем уравнения, чтобы найти их в B. Например, (1,1,1) в A равно x * r + y * u + z * f + o в B. Это дает три уравнения с тремя неизвестными и может быть решено методом одновременных уравнений. Я не буду объяснять это здесь ... но вот ссылка, если вы застряли: ссылка
Как все это связано с вашим первоначальным примером пули и машины? Что ж, если вы поворачиваете набор векторов вверх / вправо / вперед с автомобилем и обновляете происхождение по мере перевода автомобиля, вы можете перейти из мирового пространства в локальное пространство автомобиля и упростить некоторые тесты. например, вместо преобразования вершин для модели столкновения, вы можете преобразовать пулю в «автомобильное локальное» пространство и использовать локальные координаты. Это удобно, если вы собираетесь преобразовывать вершины автомобиля для рендеринга на графическом процессоре, но не хотите переносить лишние затраты на чтение этой информации для использования при физических вычислениях на процессоре.
В других случаях он может сэкономить вам преобразование x точек путем преобразования трех точек и выполнения этих операций вместо этого, что позволяет комбинировать x преобразований для большого количества точек без существенного снижения производительности по сравнению с одним преобразованием для того же числа. точек.