Использование компонента MotionController в Unreal с C ++ вместо Blueprint

После итерации по массиву FMotionControllerSource устройства OculusInputDevice IMotionController я обнаружил подключенный контроллер Oculus Right и Left Touch на основе его ETrackingStatus. С помощью левого и правого контроллеров я могу получить местоположение и вращение с помощью IMotionController API, который Returns the calibration-space orientation of the requested controller's hand.

Вот ссылка на API IMotionController: https://docs.unrealengine.com/en-US/API/Runtime/HeadMountedDisplay/IMotionController/index.html

Я хочу применить расположение / поворот к PosableMesh, чтобы сетка отображалась там, где на самом деле находится контроллер Oculus. В настоящее время с кодом ниже 3D-модель отображается вниз от камеры, поэтому масштаб отображения отключен. Я думаю, WorldToMetersScale может быть выключен. Когда я использую небольшое количество, контроллер не сильно перемещает 3D-модель, но это может ее испортить.

            FVector position;
            FRotator rotation;
            int id = tracker.deviceIndex;
            FName srcName = tracker.motionControllerSource;
            bool success = tracker.motionController->GetControllerOrientationAndPosition(id, srcName, rotation, position, 250.0f);
            if (success)
            {
                poseMesh->SetWorldLocationAndRotation(position, rotation);
            }

person karamazovbros    schedule 07.12.2019    source источник


Ответы (1)


Добавление положения камеры к положению контроллера, похоже, решило проблему:

// get camera reference during BeginPlay:
camManager = GetWorld()->GetFirstPlayerController()->PlayerCameraManager;

// TickComponent
poseMesh->SetWorldLocationAndRotation(camManager->GetCameraLocation() + position, rotation);
person karamazovbros    schedule 07.12.2019