Должен сказать, что я не совсем понимаю ваш вопрос, но, похоже, речь идет о том, как реализовать управление камерой с помощью джойстика.
Самый важный совет, который я могу вам датьв том, что лучше не вычислять углы, а работать напрямую с векторами.
Предположим, что камера смотрит в направлении v (в некоторых типах игр этот вектор будет указывать прямона игрока, но не на все типы игр, и не всегда):
Как правило, вам не важен вертикальный компонент этого вектора, поэтому удалите его, чтобы получитьгоризонтальный компонент, который я назову y по причинам, которые станут понятны позже:
y = v - ( v · вверх ) вверх
где вверх - единичный вектор, направленный вертикально вверх.
Мы можем найти горизонтальный вектор, перпендикулярный y , используя крестикoduct (и запоминание правила правой руки):
x = v × up
Теперь вы можете видеть, что y - это вектор в плоскости, направленной вперед (от камеры), а x - вектор в плоскости.направо (в сторону относительно камеры).Если вы нормализуете эти векторы:
x̂ = x / | x |
ŷ = y / | y |
, тогда вы можете использовать x̂ и ŷ какКоординатная основа для относительного движения камеры игрока.Если ваши значения джойстика Jx и Jy , переместите плеер на
s ( Jx x̂ + Jy ŷ )
где s - соответствующее скалярное значение, пропорциональное скорости игрока.
(Обратите внимание, что в этом ответе не было вычислено ни одного угла!)