Я создал объект, который движется к месту назначения с инерцией. У меня много проблем с тем, чтобы объект оказался лицом к месту назначения. Мой код прост, он вычисляет угол, преобразует его в градусы и передает этот угол в функцию Matrix4 Rotate, которая регулирует локальную трансформацию (сценарграф).Использование aTan2 для обращения к объекту до его назначения
Проблема заключается в том, что объект порождается, а затем просто вращается бесконечно. Он медленно продвигается к своей цели, но просто продолжает вращаться. Я тестировал его без перевода, он вращается независимо от места. Все, что мне нужно, это то, чтобы объект оказался лицом к месту назначения. Мои функции перевода/поворота работают правильно, я использовал его для поворота объекта, у него появился объект с ротацией родителя и головой в этом направлении. Они предоставляют результаты 1: 1 библиотеке GLM.
Я попытался подменять порядок в aTan2, удалив градусы преобразования (хотя это ничего не делает, функция Rotate принимает степень) и заменяет порядок перевода/вращения.
localTransform - комбинированная матрица поворота/масштабирования/преобразования. Строка [3] колонка [1] представляет собой Y. [3] [0] Х.
float fAngle = atan2(v3Destination[1] - localTransform.data[3][1] , v3Destination[0] - localTransform.data[3][0]);
float fAngleDegrees = fAngle * 180/PI;
localTransform = Matrix4::Rotate(localTransform, fAngleDegrees, Vector3(0.0f, 0.0f, 1.0f));
Vector3 Movement;
Movement[0] = v3Destination[0] - localTransform.data[3][0];
Movement[1] = v3Destination[1] - localTransform.data[3][1];
Movement = Movement * fSpeed * Application.GetTimeStep();
localTransform = Matrix4::Translate(localTransform, Movement);
Любые советы о том, как справиться с этим? Это все в 2D-координатах, однако вращение выполняется на Z-оси.
Кажется, что вы вычисляете угол вектора от объекта к цели, но не учитываете облицовку объекта. После того, как объект был повернут за один раз, вы снова повернете его на угол вектора на следующем шаге. – Kolmar