Я постараюсь быть очень описательным с этим. Сейчас я редактирую игру, и сценарий представляет собой 3D-область.Движение медленно начального угла до достижения конечного угла
У меня есть начальный угол, записан как вектор направления и другой вектор, который имеет разные координаты. Как известно, угол между 2 векторами определяется по формуле: Theta = ACos (DotProduct (vec1, vec2)/(VectorLength (vec1) * VectorLength (vec2)))
Итак, давайте описать сценарий: Я в настоящее время программирую какое-то стационарное оружие, часовой пистолет, эта вещь медленно двигается своей «головой», стреляя в пули врагам. Эта проблема вращения угла - моя проблема.
Давайте представим это: у меня есть мое ружье на пустой 3D-области, и там появляется «враг». В настоящее время я могу получить вектор направления моего угла зрения часового и вектор направления между моим часовым и игроком. Предположим, используя описанную формулу, его угол разделения составляет 45 градусов. Мой часовой пистолет думает (вызывает функцию) каждые 0,1 секунды, и я хочу переместить его голову 5 градусов при каждой функции мышления, пока не достигнет игрока (т. Е. Оба вектора почти равны), а это означает, что он будет (если игрок держится на своем месте ...) через 0,9 секунды (5 градусов от 45)
Как я могу медленно перемещать угол зрения часового до достижения цели? В 2D легко, но знаю, что я сражаюсь с 3D-сценарием, и в настоящее время я потерял это.
Любая помощь будет оценена, и о кодировании я буду признателен за псевдокод. Благодаря! (И простите за мой английский)
Если вы можете решить это в 2D, вы можете решить его в 3D, игнорируя 3-ей координаты для использования в ваших 2D-формулах, если она не вращается в 3-х направлениях. – rcdmk
Чтобы сделать это медленно, вы можете использовать некоторую формулу ослабления, например: 'position = currentPosition + (finalPosition - currentPosition)/easingFactor', где' easingFactor' - целое число, определяющее замедление. – rcdmk
Вам нужно будет вычислить векторный нормаль к плоскости, содержащей ** vec1 ** и ** vec2 ** - это определяет ось, вокруг которой вы будете вращать вектор прямой видимости сторожевого пистолета. Формула для выполнения вращения (скажем, ** 5 ° **) вокруг произвольного трехмерного вектора несколько сложна и объясняется по всему Интернету. Например: [здесь] (http://inside.mines.edu/fs_home/gmurray/ArbitraryAxisRotation/). Однако, если вам не нужен угол, который может варьироваться между ** vec1 ** и ** vec2 **, то линейное решение, такое как @ rcdmk, было бы достаточным, вместо линейного изменения координат. –