Поворот камеры вокруг объекта с помощью 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 такое положение камеры, Vector3
dir это направление камеры, Vector3

(PxQuat::Euler это просто пользовательская функция, которую я добавил, чтобы создать Quat из Vec3)

У кого-нибудь есть идея, что здесь происходит не так? Камера всегда направлена ​​прямо вниз, независимо от того, как я двигаю мышь.

0 ответов

Другие вопросы по тегам