Я действительно новичок в OpenGL, но довольно хорошо разбираюсь в базовой тригонометрии (совсем забыла со школы!), Но у меня возникли проблемы с этим.
У меня есть персонаж, который двигается вперед и назад по оси Z. Чтобы двигаться влево и вправо, вместо стрельбы я хочу, чтобы они вращались (при нажатии клавиш со стрелками влево и вправо соответственно), а затем, когда они снова нажимают вперед / назад, они двигаются в направлении, в котором они стоят.
Так что я сделал, чтобы левые / правые функции добавляли / вычитали небольшие суммы в переменную угла, которая используется для рисования вращения персонажа. Затем функции вперед / назад складывают / вычитают небольшие суммы из переменных осей x и z. Они следующие (для обратной):
z -= 0.005f * Math.cos(heading);
x -= 0.005f * Math.sin(heading)
Переменная заголовка - это угол, которым манипулируют клавиши со стрелками влево и вправо.
Я думал, что это сработает, потому что когда игрок идет прямо вперед, курс равен 0, поэтому cos (0) = 1 и sin (0) = 0, что означает, что они никуда не движутся по X, но пересылают всю сумму в 0,005 на Я думаю, что мои элементарные знания по тригонометрии были не совсем верными, потому что если я немного поверну, то двинусь вперёд, они пойдут в этом направлении, но если я перейду немного больше, то двинутся вперёд, они пойдут в ту же линию, если она повернулась на 90 градусов и затем продолжается снова, как если бы это было 180 градусов, затем 270 градусов и т. д.
РЕДАКТИРОВАТЬ: я попытаюсь объяснить это лучше, в основном, если я нажму вперед после поворота влево, он пойдет в нужном мне направлении, но если я отпущу вперед, поверните еще немного, а затем снова нажмите вперед угол увеличился, как и должно быть, но направление примерно на 90 градусов от направления, в котором он должен идти. Извините, я не могу объяснить это хорошо.
РЕДАКТИРОВАТЬ: Хорошо, я получаю некоторые странные проблемы, которые, я думаю, могут быть причиной странной проблемы "90 градусов", когда я получаю, чтобы персонаж смотрел на 90 градусов (с помощью жесткого заголовка = 90) влево / вправо, cos (заголовок) должен быть равен 0, верно? Но по какой-то причине он получается как -0,44, и если я cos-1 (-0,44), я получаю 116,1, это связано с тем, что Math.cos () хочет угол в радианах или что-то еще? Я полностью потерян здесь.
Это правильный путь решения этой проблемы? Я полностью застрял только проб и ошибок вокруг со знаком минус ...
Любой ответ приветствуется,
Спасибо
InfinitiFizz
(Кроме того, я знаю, что должен использовать deltaTime для значений скорости / вращения символа, а не жестко закодированный 0,005f, но я хочу сначала устранить эту проблему, прежде чем отсортировать).