Я разрабатываю небольшой игровой двигатель и добавил несколько вычислений для перемещения и вращения персонажа: < /p>
#include
#define WIN32_LEAN_AND_MEAN
#include "Windows.h"
#include
#define GLM_ENABLE_EXPERIMENTAL
#include
bool g_Running = true;
float m_DeltaTime = 0.f;
float m_LastFrame = 0.f;
float lastX = 0.f;
float lastY = 0.f;
float Xoffset = 0.f;
float Yoffset = 0.f;
bool mouseMoving = false;
bool bWalking = false;
struct PlayerTransform
{
glm::quat rotation;
glm::vec3 position;
} g_Transform;
glm::quat RotateTowards(const glm::quat& from, const glm::quat& to, float maxAngleDegrees);
void MoveCharacter();
int main()
{
while (g_Running)
{
MoveCharacter();
}
return 0;
}
glm::quat RotateTowards(const glm::quat& from, const glm::quat& to, float maxAngleDegrees)
{
if (from == to)
return to;
glm::vec3 fromVector = from * glm::vec3(0.f, 0.f, 1.f);
glm::vec3 toVector = to * glm::vec3(0.f, 0.f, 1.f);
if (glm::length(fromVector) 0.f)
targetRotation = glm::quatLookAtLH(moveDir, glm::vec3(0.f, 1.f, 0.f));
}
if (targetRotation != g_Transform.rotation)
g_Transform.rotation = RotateTowards(g_Transform.rotation, targetRotation, rotSpeed);
g_Transform.position += velocity * m_DeltaTime * moveSpeed;
auto eulerRotation = glm::eulerAngles(g_Transform.rotation);
printf("Rotation (%f, %f, %f)\n", eulerRotation.x, eulerRotation.y, eulerRotation.z);
}
< /code>
Но когда я перемещаю его немного поворота Решите эту проблему?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... acter-in-c