Поворот камеры вокруг объекта с помощью PhysX
Я работаю над проектом PhysX с GLUT и пытаюсь заставить камеру вращаться вокруг объекта, управляемого мышью.
Моим первым шагом было портирование кода C#, найденного здесь: http://wiki.unity3d.com/index.php/MouseOrbitImproved
Это для Unity, но разрешено именно то, что мне нужно (кроме raycast, я их опускал)
Это работает до некоторой степени - камера вращается вокруг объекта, однако она не может смотреть на объект.
void Camera::UpdateCamera(float mouseX, float mouseY) {
x += mouseX * xMoveSpeed * distance * 0.02f;
y -= mouseY * yMoveSpeed * 0.02f;
y = ClampAngle(y, yMinLimit, yMaxLimit);
PxQuat rot = PxQuat::Euler(PxVec3(y, x, 0));
distance = PxClamp(distance, distanceMin, distanceMax);
PxVec3 negDist = PxVec3(0.0f, 0.0f, -distance);
PxVec3 pos = rot.rotate(negDist) + target->getGlobalPose().p;
eye = pos;
dir = PxVec3(y, x, 0);
}
float Camera::ClampAngle(float angle, float min, float max) {
if (angle < -360.0f)
angle += 360.0f;
if (angle > 360.0f)
angle -= 360.0f;
return PxClamp(angle, min, max);
}
eye
такое положение камеры, Vector3dir
это направление камеры, Vector3
(PxQuat::Euler
это просто пользовательская функция, которую я добавил, чтобы создать Quat из Vec3)
У кого-нибудь есть идея, что здесь происходит не так? Камера всегда направлена прямо вниз, независимо от того, как я двигаю мышь.