@ GUNNM: Что касается ваших отзывов о том, что вы не знаете, как обращаться с вектором направления, вот несколько идей, которые могут быть вам полезны.
Как я уже сказал, должен быть способ умножения матриц. Ищите ключевые слова, такие как «преобразование вектора направленности с помощью матрицы» или «преобразование нормалей (векторов нормалей) с помощью матрицы». Это должно привести к чему-то вроде: «использовать транспонирование используемой матрицы преобразования» или «инверсию матрицы» или что-то в этом роде.
Обходной путь может быть таким: Вы можете «преобразовать» вектор направления в точка, думая о направлении как о «двух точках», образующих вектор: начальную точку и другую точку, которая находится в направлении, которое вы хотите указать.
Начальная точка вашего луча у вас уже есть в наличии. Теперь вам нужно убедиться, что ваш вектор направления интерпретируется как «вторая точка», а не как «вектор направления».
Если ваш двигатель обрабатывает луч, как в первом случае, у вас будет: Вот моя отправная точка (0,0,0) и вот мой вектор направления (5,6, -7) (я сделал эти числа и взять начало в качестве отправной точки, чтобы иметь простой пример). Так что это просто обычный случай «начало + взгляд».
Во втором случае вы должны иметь: Вот мой старт с (0,0,0), а моя вторая точка - точка на моем направлении вектор (5,6, -7), например, любое направление t *. Который для t = 1 должен точно указывать точку, на которую указывает вектор направления, если он считается вектором (а исходной точкой является начало координат (0,0,0)).
Теперь вам нужно проверить, как ваш алгоритм обрабатывает это направление. Если он где-то делает луч = начальная точка + направление, то он интерпретирует его как точку + вектор, что приводит к смещению начальной точки при сохранении ориентации и направления вектора.
Если он делает луч = начальная точка-направление, то он интерпретирует его как две точки, из которых формируется вектор направления путем вычитания.
Чтобы сделать вектор направления из двух точек, обычно их просто нужно вычесть. Это дает «чистое направление», но без определенной ориентации (которая может быть + t или -t). Поэтому, если вам нужно, чтобы это направление было зафиксировано, вы можете взять абсолютное значение вашего «вектора скользящего значения» t, например, в более поздних вычислениях (это может быть не самый лучший / самый быстрый способ сделать это).