Моделирование восприятия
Вы хотите создать автоматизированный тест для вашего приложения? Вы хотите, чтобы тесты выходят за рамки модульного тестирования на уровне компонентов и действительно выполняют комплексное выполнение приложения? Моделирование восприятия — это то, что вы ищете. Библиотека имитации восприятия отправляет в приложение данные ввода человека и мира, чтобы автоматизировать тесты. Например, можно имитировать входные данные человека, глядя на определенную, повторяемую позицию, а затем использовать жест или контроллер движения.
Имитация восприятия может отправлять имитированные входные данные, такие как это, в физический HoloLens, эмулятор HoloLens (первое поколение), эмулятор HoloLens 2 или компьютер с установленным порталом Смешанная реальность. Имитация восприятия проходит динамические датчики на устройстве Смешанная реальность и отправляет имитированные входные данные приложениям, работающим на устройстве. Приложения получают эти входные события через те же API, которые они всегда используют, и не могут определить разницу между выполнением с реальными датчиками и моделированием восприятия. Моделирование восприятия — это та же технология, которая используется эмуляторами HoloLens для отправки имитированных входных данных на виртуальную машину HoloLens.
Чтобы начать использование имитации в коде, начните с создания объекта IPerceptionSimulationManager. Из этого объекта можно выдавать команды для управления свойствами имитированного "человека", включая положение головы, положение руки и жесты. Вы также можете включить и управлять контроллерами движения.
Настройка проекта Visual Studio для имитации восприятия
Установите эмулятор HoloLens на компьютере разработки. Эмулятор включает библиотеки, которые вы используете для моделирования восприятия.
Создайте новый классический проект Visual Studio C# (консольный проект отлично подходит для начала работы).
Добавьте в проект следующие двоичные файлы в качестве ссылок (Project-Add-Reference>>...). Их можно найти в %ProgramFiles(x86)%\Microsoft XDE\(версия), например %ProgramFiles(x86)%\Microsoft XDE\10.0.18362.0 для эмулятора HoloLens 2.
Примечание.
Хотя двоичные файлы являются частью эмулятора HoloLens 2, они также работают для Windows Смешанная реальность на рабочем столе.)
a. PerceptionSimulationManager.Interop.dll — управляемый оболочка C# для моделирования восприятия.
b. PerceptionSimulationRest.dll — библиотека для настройки канала связи с веб-сокетом в HoloLens или эмуляторе.
c. SimulationStream.Interop.dll — общие типы для моделирования.Добавление двоичного PerceptionSimulationManager.dll реализации в проект
a. Сначала добавьте его в проект в виде двоичного файла (элемент Project-Add-Existing>>...). Сохраните ее как ссылку, чтобы она не скопирует ее в папку источника проекта.
b. Затем убедитесь, что он копируется в выходную папку при сборке. Это находится на листе свойств двоичного файла.
Задайте для активной платформы решения значение x64. (Используйте Configuration Manager для создания записи платформы для x64, если она еще не существует.)
Создание объекта IPerceptionSimulation Manager
Для управления имитацией вы получите обновления для объектов, полученных из объекта IPerceptionSimulationManager. Первым шагом является получение этого объекта и его подключение к целевому устройству или эмулятору. Ip-адрес эмулятора можно получить, нажав кнопку "Портал устройства" на панели инструментов
Откройте портал устройств: откройте портал устройств Windows для ОС HoloLens в эмуляторе. Для Windows Смешанная реальность это можно получить в приложении "Параметры" в разделе "Обновление и безопасность", а затем "Для разработчиков" в разделе "Подключение с помощью:" в разделе "Включить портал устройств". Обязательно запишите IP-адрес и порт.
Сначала вы вызовете RestSimulationStreamSink.Create, чтобы получить объект RestSimulationStreamSink. Это целевое устройство или эмулятор, который вы будете контролировать http-подключение. Ваши команды будут переданы и обработаны порталом устройств Windows, запущенным на устройстве или эмуляторе. Для создания объекта потребуется четыре параметра:
- URI URI — IP-адрес целевого устройства (например, "https://123.123.123.123" или "https://123.123.123.123:50080")
- Учетные данные System.Net.NetworkCredential — имя пользователя или пароль для подключения к порталу устройств Windows на целевом устройстве или эмуляторе. Если вы подключаетесь к эмулятору через локальный адрес (например, 168..). *) на одном компьютере все учетные данные будут приняты.
- bool normal — True для нормального приоритета, false для низкого приоритета. Как правило, вы хотите задать это значение true для сценариев тестирования, что позволяет тесту управлять. Эмулятор и моделирование Windows Смешанная реальность используют низкоприоритетные подключения. Если тест также использует низкоприоритетное подключение, то последнее установленное подключение будет контролироваться.
- Токен System.Threading.CancelToken — маркер для отмены асинхронной операции.
Во-вторых, вы создадите IPerceptionSimulationManager. Это объект, используемый для управления имитацией. Это также необходимо сделать в асинхронном методе.
Управление имитацией человека
IPerceptionSimulationManager имеет свойство Human, которое возвращает объект ISimulatedHuman. Чтобы управлять имитируемым человеком, выполните операции с этим объектом. Например:
manager.Human.Move(new Vector3(0.1f, 0.0f, 0.0f))
Базовое консольное приложение C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.PerceptionSimulation;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Task.Run(async () =>
{
RestSimulationStreamSink sink = null;
CancellationToken token = new System.Threading.CancellationToken();
try
{
sink = await RestSimulationStreamSink.Create(
// use the IP address for your device/emulator
new Uri("https://169.254.227.115"),
// no credentials are needed for the emulator
new System.Net.NetworkCredential("", ""),
// normal priorty
true,
// cancel token
token);
IPerceptionSimulationManager manager = PerceptionSimulationManager.CreatePerceptionSimulationManager(sink);
}
catch (Exception e)
{
Console.WriteLine(e);
}
// Always close the sink to return control to the previous application.
if (sink != null)
{
await sink.Close(token);
}
});
// If main exits, the process exits.
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
}
}
}
Расширенное консольное приложение C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.PerceptionSimulation;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
RestSimulationStreamSink sink = null;
CancellationToken token = new System.Threading.CancellationToken();
Task.Run(async () =>
{
try
{
sink = await RestSimulationStreamSink.Create(
// use the IP address for your device/emulator
new Uri("https://169.254.227.115"),
// no credentials are needed for the emulator
new System.Net.NetworkCredential("", ""),
// normal priorty
true,
// cancel token
token);
IPerceptionSimulationManager manager = PerceptionSimulationManager.CreatePerceptionSimulationManager(sink);
// Now, we'll simulate a sequence of actions.
// Sleeps in-between each action give time to the system
// to be able to properly react.
// This is just an example. A proper automated test should verify
// that the app has behaved correctly
// before proceeding to the next step, instead of using Sleeps.
// Activate the right hand
manager.Human.RightHand.Activated = true;
// Simulate Bloom gesture, which should cause Shell to disappear
manager.Human.RightHand.PerformGesture(SimulatedGesture.Home);
Thread.Sleep(2000);
// Simulate Bloom gesture again... this time, Shell should reappear
manager.Human.RightHand.PerformGesture(SimulatedGesture.Home);
Thread.Sleep(2000);
// Simulate a Head rotation down around the X axis
// This should cause gaze to aim about the center of the screen
manager.Human.Head.Rotate(new Rotation3(0.04f, 0.0f, 0.0f));
Thread.Sleep(300);
// Simulate a finger press & release
// Should cause a tap on the center tile, thus launching it
manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerPressed);
Thread.Sleep(300);
manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerReleased);
Thread.Sleep(2000);
// Simulate a second finger press & release
// Should activate the app that was launched when the center tile was clicked
manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerPressed);
Thread.Sleep(300);
manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerReleased);
Thread.Sleep(5000);
// Simulate a Head rotation towards the upper right corner
manager.Human.Head.Rotate(new Rotation3(-0.14f, 0.17f, 0.0f));
Thread.Sleep(300);
// Simulate a third finger press & release
// Should press the Remove button on the app
manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerPressed);
Thread.Sleep(300);
manager.Human.RightHand.PerformGesture(SimulatedGesture.FingerReleased);
Thread.Sleep(2000);
// Simulate Bloom gesture again... bringing the Shell back once more
manager.Human.RightHand.PerformGesture(SimulatedGesture.Home);
Thread.Sleep(2000);
}
catch (Exception e)
{
Console.WriteLine(e);
}
});
// If main exits, the process exits.
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
// Always close the sink to return control to the previous application.
if (sink != null)
{
sink.Close(token);
}
}
}
}
Примечание на контроллерах 6-DOF
Перед вызовом любых свойств методов на имитированном контроллере 6-DOF необходимо активировать контроллер. Это приведет к исключению. Начиная с обновление Windows 10 за май 2019 г., можно установить и активировать имитированные контроллеры 6-DOF, задав свойство Status для объекта ISimulatedSixDofController значение SimulatedSixDofControllerStatus.Active. В обновление Windows 10 за октябрь 2018 г. и более ранних версиях необходимо отдельно установить имитированный контроллер 6-DOF, вызвав средство PerceptionSimulationDevice, расположенное в папке \Windows\System32. Использование этого средства выглядит следующим образом:
PerceptionSimulationDevice.exe <action> 6dof <instance>
Например.
PerceptionSimulationDevice.exe i 6dof 1
Поддерживаемые действия:
- i = установка
- q = запрос
- r = remove
Поддерживаемые экземпляры:
- 1 = левый 6-DOF-контроллер
- 2 = правый контроллер 6-DOF
Код выхода процесса будет указывать на успешность (нулевое возвращаемое значение) или сбой (ненулевое возвращаемое значение). При использовании действия q для запроса о том, установлен ли контроллер, возвращаемое значение будет равно нулю (0), если контроллер еще не установлен или один (1), если контроллер установлен.
При удалении контроллера на обновление Windows 10 за октябрь 2018 г. или более ранних версий задайте для него значение Off через API, а затем вызовите средство PerceptionSimulationDevice.
Это средство должно быть запущено от имени администратора.
Справочник по API
Microsoft.PerceptionSimulation.SimulatedDeviceType
Описание имитированного типа устройства
public enum SimulatedDeviceType
{
Reference = 0
}
Microsoft.PerceptionSimulation.SimulatedDeviceType.Reference
Вымышленное эталонное устройство, по умолчанию для PerceptionSimulationManager
Microsoft.PerceptionSimulation.HeadTrackerMode
Описание режима отслеживания головы
public enum HeadTrackerMode
{
Default = 0,
Orientation = 1,
Position = 2
}
Microsoft.PerceptionSimulation.HeadTrackerMode.Default
Отслеживание головы по умолчанию. Это означает, что система может выбрать лучший режим отслеживания головы в зависимости от условий выполнения.
Microsoft.PerceptionSimulation.HeadTrackerMode.Orientation
Отслеживание только ориентации. Это означает, что отслеживаемая позиция может быть ненадежной, и некоторые функции, зависящие от позиции головы, могут быть недоступны.
Microsoft.PerceptionSimulation.HeadTrackerMode.Position
Отслеживание позиционной головы. Это означает, что отслеживаемая позиция головы и ориентация являются надежными
Microsoft.PerceptionSimulation.SimulatedGesture
Описание имитированного жеста
public enum SimulatedGesture
{
None = 0,
FingerPressed = 1,
FingerReleased = 2,
Home = 4,
Max = Home
}
Microsoft.PerceptionSimulation.SimulatedGesture.None
Значение sentinel, используемое для указания без жестов.
Microsoft.PerceptionSimulation.SimulatedGesture.FingerPressed
Жест нажатия пальца.
Microsoft.PerceptionSimulation.SimulatedGesture.FingerReleased
Отпущенный пальцем жест.
Microsoft.PerceptionSimulation.SimulatedGesture.Home
Жест домашнего или системного.
Microsoft.PerceptionSimulation.SimulatedGesture.Max
Максимальный допустимый жест.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus
Возможные состояния имитированного контроллера 6-DOF.
public enum SimulatedSixDofControllerStatus
{
Off = 0,
Active = 1,
TrackingLost = 2,
}
Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus.Off
Контроллер 6-DOF отключен.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus.Active
Контроллер 6-DOF включен и отслеживается.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerStatus.TrackingLost
Контроллер 6-DOF включен, но его нельзя отслеживать.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton
Поддерживаемые кнопки на имитированном контроллере 6-DOF.
public enum SimulatedSixDofControllerButton
{
None = 0,
Home = 1,
Menu = 2,
Grip = 4,
TouchpadPress = 8,
Select = 16,
TouchpadTouch = 32,
Thumbstick = 64,
Max = Thumbstick
}
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.None
Значение sentinel, используемое для указания без кнопок.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Home
Кнопка "Главная" нажимается.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Menu
Кнопка меню нажимается.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Grip
Кнопка "Захват" нажимается.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.TouchpadPress
Нажата сенсорная панель.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Select
Нажмите кнопку "Выбрать".
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.TouchpadTouch
Сенсорный блок касается.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Thumbstick
Нажата палка.
Microsoft.PerceptionSimulation.SimulatedSixDofControllerButton.Max
Максимальная допустимая кнопка.
Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState
Состояние калибровки имитированного глаза
public enum SimulatedGesture
{
Unavailable = 0,
Ready = 1,
Configuring = 2,
UserCalibrationNeeded = 3
}
Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.Unavailable
Калибровка глаз недоступна.
Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.Ready
Глаза были откалибрированы. Это значение по умолчанию.
Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.Configuring
Глаза калибруются.
Microsoft.PerceptionSimulation.SimulatedEyesCalibrationState.UserCalibrationNeeded
Глаза должны быть откалиброваны.
Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy
Точность отслеживания сустава руки.
public enum SimulatedHandJointTrackingAccuracy
{
Unavailable = 0,
Approximate = 1,
Visible = 2
}
Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy.Недоступно
Совместное не отслеживается.
Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy.Approximate
Объединенная позиция выводится.
Microsoft.PerceptionSimulation.SimulatedHandJointTrackingAccuracy.Visible
Соединение полностью отслеживается.
Microsoft.PerceptionSimulation.SimulatedHandPose
Точность отслеживания сустава руки.
public enum SimulatedHandPose
{
Closed = 0,
Open = 1,
Point = 2,
Pinch = 3,
Max = Pinch
}
Microsoft.PerceptionSimulation.SimulatedHandPose.Closed
Пальцы руки настроены для отражения закрытой позы.
Microsoft.PerceptionSimulation.SimulatedHandPose.Open
Пальцы руки настроены для отражения открытой позы.
Microsoft.PerceptionSimulation.SimulatedHandPose.Point
Пальцы руки настроены для отражения указателя позу.
Microsoft.PerceptionSimulation.SimulatedHandPose.Pinch
Пальцы руки настроены для отражения щипучих поз.
Microsoft.PerceptionSimulation.SimulatedHandPose.Max
Максимально допустимое значение для SimulatedHandPose.
Microsoft.PerceptionSimulation.PlaybackState
Описывает состояние воспроизведения.
public enum PlaybackState
{
Stopped = 0,
Playing = 1,
Paused = 2,
End = 3,
}
Microsoft.PerceptionSimulation.PlaybackState.Остановлено
Запись в настоящее время остановлена и готова к воспроизведению.
Microsoft.PerceptionSimulation.PlayState.Playing
Запись в настоящее время воспроизводит.
Microsoft.PerceptionSimulation.PlaybackState.Paused
Запись в настоящее время приостановлена.
Microsoft.PerceptionSimulation.PlaybackState.End
Запись достигла конца.
Microsoft.PerceptionSimulation.Vector3
Описывает вектор трех компонентов, который может описать точку или вектор в трехмерном пространстве.
public struct Vector3
{
public float X;
public float Y;
public float Z;
public Vector3(float x, float y, float z);
}
Microsoft.PerceptionSimulation.Vector3.X
Координата X вектора.
Microsoft.PerceptionSimulation.Vector3.Y
Координата Y вектора.
Microsoft.PerceptionSimulation.Vector3.Z
Координата Z вектора.
Microsoft.PerceptionSimulation.Vector3.#ctor(System.Single,System.Single,System.Single,System.Single)
Создайте новый Vector3.
Параметры
- x — компонент x вектора.
- y — компонент y вектора.
- z — компонент z вектора.
Microsoft.PerceptionSimulation.Rotation3
Описывает смену трех компонентов.
public struct Rotation3
{
public float Pitch;
public float Yaw;
public float Roll;
public Rotation3(float pitch, float yaw, float roll);
}
Microsoft.PerceptionSimulation.Rotation3.Pitch
Компонент "Шаг" поворота вниз по оси X.
Microsoft.PerceptionSimulation.Rotation3.Yaw
Компонент Yaw поворота справа вокруг оси Y.
Microsoft.PerceptionSimulation.Rotation3.Roll
Компонент Roll поворота вправо вокруг оси Z.
Microsoft.PerceptionSimulation.Rotation3.#ctor(System.Single,System.Single,System.Single,System.Single)
Создайте новый поворот3.
Параметры
- шаг - Компонент шага поворота.
- yaw — компонент рывка поворота.
- roll — компонент свертки поворота.
Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration
Описывает конфигурацию сустава на имитированной руке.
public struct SimulatedHandJointConfiguration
{
public Vector3 Position;
public Rotation3 Rotation;
public SimulatedHandJointTrackingAccuracy TrackingAccuracy;
}
Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration.Position
Положение сустава.
Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration.Rotation
Поворот сустава.
Microsoft.PerceptionSimulation.SimulatedHandJointConfiguration.TrackingAccuracy
Точность отслеживания сустава.
Microsoft.PerceptionSimulation.Frustum
Описывает представление frustum, как обычно используется камерой.
public struct Frustum
{
float Near;
float Far;
float FieldOfView;
float AspectRatio;
}
Microsoft.PerceptionSimulation.Frustum.Near
Минимальное расстояние, содержащееся в frustum.
Microsoft.PerceptionSimulation.Frustum.Far
Максимальное расстояние, содержащееся в frustum.
Microsoft.PerceptionSimulation.Frustum.FieldOfView
Горизонтальное поле зрения frustum в радианах (меньше PI).
Microsoft.PerceptionSimulation.Frustum.AspectRatio
Отношение горизонтального поля представления к вертикальному полю представления.
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration
Описывает конфигурацию имитированного дисплея гарнитуры.
public struct SimulatedDisplayConfiguration
{
public Vector3 LeftEyePosition;
public Rotation3 LeftEyeRotation;
public Vector3 RightEyePosition;
public Rotation3 RightEyeRotation;
public float Ipd;
public bool ApplyEyeTransforms;
public bool ApplyIpd;
}
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.LeftEyePosition
Преобразование от центра головы к левому глазу в целях стереорисовки.
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.LeftEyeRotation
Поворот левого глаза в целях стереорисовки.
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.RightEyePosition
Преобразование от центра головы к правому глазу в целях стереорисовки.
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.RightEyeRotation
Поворот правого глаза в целях стереорисовки.
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.Ipd
Значение Ipd, сообщаемое системой в целях стереорисовки.
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.ApplyEyeTransforms
Следует ли учитывать допустимые значения, предоставленные для преобразования левого и правого глаз, и применяться ли к работающей системе.
Microsoft.PerceptionSimulation.SimulatedDisplayConfiguration.ApplyIpd
Следует ли считать значение, указанное для Ipd, допустимым и примененным к работающей системе.
Microsoft.PerceptionSimulation.IPerceptionSimulationManager
Корневой каталог для создания пакетов, используемых для управления устройством.
public interface IPerceptionSimulationManager
{
ISimulatedDevice Device { get; }
ISimulatedHuman Human { get; }
void Reset();
}
Microsoft.PerceptionSimulation.IPerceptionSimulationManager.Device
Извлеките имитированный объект устройства, который интерпретирует имитированный человек и имитированный мир.
Microsoft.PerceptionSimulation.IPerceptionSimulationManager.Human
Получите объект, который управляет имитируемым человеком.
Microsoft.PerceptionSimulation.IPerceptionSimulationManager.Reset
Сбрасывает имитацию в состояние по умолчанию.
Microsoft.PerceptionSimulation.ISimulatedDevice
Интерфейс, описывающий устройство, которое интерпретирует имитированный мир и имитированного человека
public interface ISimulatedDevice
{
ISimulatedHeadTracker HeadTracker { get; }
ISimulatedHandTracker HandTracker { get; }
void SetSimulatedDeviceType(SimulatedDeviceType type);
}
Microsoft.PerceptionSimulation.ISimulatedDevice.HeadTracker
Получите средство отслеживания головы из имитированного устройства.
Microsoft.PerceptionSimulation.ISimulatedDevice.HandTracker
Получите средство отслеживания рук из имитированного устройства.
Microsoft.PerceptionSimulation.ISimulatedDevice.SetSimulatedDeviceType(Microsoft.PerceptionSimulation.SimulatedDeviceType)
Задайте свойства имитированного устройства, чтобы соответствовать указанному типу устройства.
Параметры
- тип — новый тип имитированного устройства
Microsoft.PerceptionSimulation.ISimulatedDevice2
Дополнительные свойства доступны путем приведения ISimulatedDevice к ISimulatedDevice2
public interface ISimulatedDevice2
{
bool IsUserPresent { [return: MarshalAs(UnmanagedType.Bool)] get; [param: MarshalAs(UnmanagedType.Bool)] set; }
SimulatedDisplayConfiguration DisplayConfiguration { get; set; }
};
Microsoft.PerceptionSimulation.ISimulatedDevice2.IsUserPresent
Извлекает или задает, активно ли имитированный человек носит гарнитуру.
Microsoft.PerceptionSimulation.ISimulatedDevice2.DisplayConfiguration
Извлеките или задайте свойства имитированного дисплея.
Microsoft.PerceptionSimulation.ISimulatedHeadTracker
Интерфейс, описывающий часть имитированного устройства, отслеживающего голову имитированного человека.
public interface ISimulatedHeadTracker
{
HeadTrackerMode HeadTrackerMode { get; set; }
};
Microsoft.PerceptionSimulation.ISimulatedHeadTracker.HeadTrackerMode
Извлекает и задает текущий режим отслеживания головы.
Microsoft.PerceptionSimulation.ISimulatedHandTracker
Интерфейс, описывающий часть имитированного устройства, отслеживающего руки имитированного человека
public interface ISimulatedHandTracker
{
Vector3 WorldPosition { get; }
Vector3 Position { get; set; }
float Pitch { get; set; }
bool FrustumIgnored { [return: MarshalAs(UnmanagedType.Bool)] get; [param: MarshalAs(UnmanagedType.Bool)] set; }
Frustum Frustum { get; set; }
}
Microsoft.PerceptionSimulation.ISimulatedHandTracker.WorldPosition
Извлеките положение узла с отношением к миру в метрах.
Microsoft.PerceptionSimulation.ISimulatedHandTracker.Position
Извлекает и задает положение имитированного отслеживания рук относительно центра головы.
Microsoft.PerceptionSimulation.ISimulatedHandTracker.Pitch
Извлекает и задает нисходящий шаг имитированного средства отслеживания рук.
Microsoft.PerceptionSimulation.ISimulatedHandTracker.FrustumIgnored
Извлекает и задает, игнорируется ли frustum имитированного средства отслеживания рук. При пропусках обе руки всегда видны. Если руки не игнорируются (по умолчанию), они видны только в том случае, если они находятся в пределах frustum средства отслеживания рук.
Microsoft.PerceptionSimulation.ISimulatedHandTracker.Frustum
Извлекает и задает свойства frustum, используемые для определения того, видны ли руки имитированному средство отслеживания рук.
Microsoft.PerceptionSimulation.ISimulatedHuman
Интерфейс верхнего уровня для управления имитируемым человеком.
public interface ISimulatedHuman
{
Vector3 WorldPosition { get; set; }
float Direction { get; set; }
float Height { get; set; }
ISimulatedHand LeftHand { get; }
ISimulatedHand RightHand { get; }
ISimulatedHead Head { get; }s
void Move(Vector3 translation);
void Rotate(float radians);
}
Microsoft.PerceptionSimulation.ISimulatedHuman.WorldPosition
Извлекает и задает положение узла с отношением к миру в метрах. Позиция соответствует точке в центре ног человека.
Microsoft.PerceptionSimulation.ISimulatedHuman.Direction
Извлеките и задайте направление имитированных человеческих лиц в мире. 0 радианы сталкиваются вниз по отрицательной оси Z. Положительные радианы вращаются по часовой стрелке по оси Y.
Microsoft.PerceptionSimulation.ISimulatedHuman.Height
Извлеките и задайте высоту имитированного человека в метрах.
Microsoft.PerceptionSimulation.ISimulatedHuman.LeftHand
Извлеките левую руку имитированного человека.
Microsoft.PerceptionSimulation.ISimulatedHuman.RightHand
Извлеките правую руку имитированного человека.
Microsoft.PerceptionSimulation.ISimulatedHuman.Head
Извлеките голову имитированного человека.
Microsoft.PerceptionSimulation.ISimulatedHuman.Move(Microsoft.PerceptionSimulation.Vector3)
Перемещение имитированного человека относительно текущего положения в метрах.
Параметры
- перевод — перевод для перемещения относительно текущей позиции.
Microsoft.PerceptionSimulation.ISimulatedHuman.Rotate(System.Single)
Поворот имитированного человека относительно текущего направления по часовой стрелке по оси Y
Параметры
- радианы — величина поворота вокруг оси Y.
Microsoft.PerceptionSimulation.ISimulatedHuman2
Дополнительные свойства доступны путем приведения ISimulatedHuman к ISimulatedHuman2
public interface ISimulatedHuman2
{
/* New members in addition to those available on ISimulatedHuman */
ISimulatedSixDofController LeftController { get; }
ISimulatedSixDofController RightController { get; }
}
Microsoft.PerceptionSimulation.ISimulatedHuman2.LeftController
Слева 6-DOF-контроллер.
Microsoft.PerceptionSimulation.ISimulatedHuman2.RightController
Получите правый контроллер 6-DOF.
Microsoft.PerceptionSimulation.ISimulatedHand
Интерфейс, описывающий руку имитированного человека
public interface ISimulatedHand
{
Vector3 WorldPosition { get; }
Vector3 Position { get; set; }
bool Activated { [return: MarshalAs(UnmanagedType.Bool)] get; [param: MarshalAs(UnmanagedType.Bool)] set; }
bool Visible { [return: MarshalAs(UnmanagedType.Bool)] get; }
void EnsureVisible();
void Move(Vector3 translation);
void PerformGesture(SimulatedGesture gesture);
}
Microsoft.PerceptionSimulation.ISimulatedHand.WorldPosition
Извлеките положение узла с отношением к миру в метрах.
Microsoft.PerceptionSimulation.ISimulatedHand.Position
Извлекает и задает положение имитированной руки относительно человека в метрах.
Microsoft.PerceptionSimulation.ISimulatedHand.Activated
Извлекает и задает, активируется ли в данный момент рука.
Microsoft.PerceptionSimulation.ISimulatedHand.Visible
Извлеките, отображается ли рука в настоящее время в имитированномdDevice (т. е. находится ли оно в состоянии, которое должно быть обнаружено handTracker).
Microsoft.PerceptionSimulation.ISimulatedHand.EnsureVisible
Переместите руку таким образом, чтобы он был видимым для имитированногоDevice.
Microsoft.PerceptionSimulation.ISimulatedHand.Move(Microsoft.PerceptionSimulation.Vector3)
Перемещение позиции имитированной руки относительно текущей позиции в метрах.
Параметры
- перевод — сумма для перевода имитированной руки.
Microsoft.PerceptionSimulation.ISimulatedHand.PerformGesture(Microsoft.PerceptionSimulation.SimulatedGesture)
Выполните жест с помощью имитированной руки. Она будет обнаружена системой только в том случае, если она включена.
Параметры
- жест — жест для выполнения.
Microsoft.PerceptionSimulation.ISimulatedHand2
Дополнительные свойства доступны путем приведения ISimulatedHand к ISimulatedHand2.
public interface ISimulatedHand2
{
/* New members in addition to those available on ISimulatedHand */
Rotation3 Orientation { get; set; }
}
Microsoft.PerceptionSimulation.ISimulatedHand2.Orientation
Получение или установка поворота имитированной руки. Положительные радианы поворачиваются по часовой стрелке при просмотре вдоль оси.
Microsoft.PerceptionSimulation.ISimulatedHand3
Дополнительные свойства доступны путем приведения ISimulatedHand к ISimulatedHand3
public interface ISimulatedHand3
{
/* New members in addition to those available on ISimulatedHand and ISimulatedHand2 */
GetJointConfiguration(SimulatedHandJoint joint, out SimulatedHandJointConfiguration jointConfiguration);
SetJointConfiguration(SimulatedHandJoint joint, SimulatedHandJointConfiguration jointConfiguration);
SetHandPose(SimulatedHandPose pose, bool animate);
}
Microsoft.PerceptionSimulation.ISimulatedHand3.GetJointConfiguration
Получите общую конфигурацию для указанного сустава.
Microsoft.PerceptionSimulation.ISimulatedHand3.SetJointConfiguration
Задайте общую конфигурацию для указанного сустава.
Microsoft.PerceptionSimulation.ISimulatedHand3.SetHandPose
Задайте для руки известное положение с необязательным флагом, чтобы анимировать. Примечание. Анимация не приведет к немедленному отражению их окончательных конфигураций совместного соединения.
Microsoft.PerceptionSimulation.ISimulatedHead
Интерфейс, описывающий голову имитированного человека.
public interface ISimulatedHead
{
Vector3 WorldPosition { get; }
Rotation3 Rotation { get; set; }
float Diameter { get; set; }
void Rotate(Rotation3 rotation);
}
Microsoft.PerceptionSimulation.ISimulatedHead.WorldPosition
Извлеките положение узла с отношением к миру в метрах.
Microsoft.PerceptionSimulation.ISimulatedHead.Rotation
Получите поворот имитированной головы. Положительные радианы поворачиваются по часовой стрелке при просмотре вдоль оси.
Microsoft.PerceptionSimulation.ISimulatedHead.Diameter
Получение диаметра имитированной головы. Это значение используется для определения центра головы (точки поворота).
Microsoft.PerceptionSimulation.ISimulatedHead.Rotate(Microsoft.PerceptionSimulation.Rotation3)
Поворот имитированной головы относительно текущего поворота. Положительные радианы поворачиваются по часовой стрелке при просмотре вдоль оси.
Параметры
- поворот — величина поворота.
Microsoft.PerceptionSimulation.ISimulatedHead2
Дополнительные свойства доступны путем приведения ISimulatedHead к ISimulatedHead2
public interface ISimulatedHead2
{
/* New members in addition to those available on ISimulatedHead */
ISimulatedEyes Eyes { get; }
}
Microsoft.PerceptionSimulation.ISimulatedHead2.Eyes
Извлеките глаза имитированного человека.
Microsoft.PerceptionSimulation.ISimulatedSixDofController
Интерфейс, описывающий контроллер 6-DOF, связанный с имитируемым человеком.
public interface ISimulatedSixDofController
{
Vector3 WorldPosition { get; }
SimulatedSixDofControllerStatus Status { get; set; }
Vector3 Position { get; }
Rotation3 Orientation { get; set; }
void Move(Vector3 translation);
void PressButton(SimulatedSixDofControllerButton button);
void ReleaseButton(SimulatedSixDofControllerButton button);
void GetTouchpadPosition(out float x, out float y);
void SetTouchpadPosition(float x, float y);
}
Microsoft.PerceptionSimulation.ISimulatedSixDofController.WorldPosition
Извлеките положение узла с отношением к миру в метрах.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.Status
Получение или установка текущего состояния контроллера. Состояние контроллера должно быть задано как значение, отличное от off, прежде чем все вызовы для перемещения, поворота или нажатия кнопок будут успешными.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.Position
Извлеките или задайте положение имитированного контроллера относительно человека в метрах.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.Orientation
Получение или установка ориентации имитированного контроллера.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.Move(Microsoft.PerceptionSimulation.Vector3)
Перемещение позиции имитированного контроллера относительно текущей позиции в метрах.
Параметры
- перевод — сумма для перевода имитированного контроллера.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.PressButton(SimulatedSixDofControllerButton)
Нажмите кнопку на имитированном контроллере. Она будет обнаружена системой только в том случае, если контроллер включен.
Параметры
- кнопка — кнопка для нажатия.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.ReleaseButton(SimulatedSixDofControllerButton)
Отпустите кнопку на имитированном контроллере. Она будет обнаружена системой только в том случае, если контроллер включен.
Параметры
- кнопка — кнопка, отпустимая.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.GetTouchpadPosition(out float, out float)
Получите положение имитированного пальца на сенсорной панели имитированного контроллера.
Параметры
- x — горизонтальное положение пальца.
- y — вертикальное положение пальца.
Microsoft.PerceptionSimulation.ISimulatedSixDofController.SetTouchpadPosition(float, float)
Задайте положение имитированного пальца на сенсорной панели имитированного контроллера.
Параметры
- x — горизонтальное положение пальца.
- y — вертикальное положение пальца.
Microsoft.PerceptionSimulation.ISimulatedSixDofController2
Дополнительные свойства и методы доступны путем приведения ISimulatedSixDofController к ISimulatedSixDofController2
public interface ISimulatedSixDofController2
{
/* New members in addition to those available on ISimulatedSixDofController */
void GetThumbstickPosition(out float x, out float y);
void SetThumbstickPosition(float x, float y);
float BatteryLevel { get; set; }
}
Microsoft.PerceptionSimulation.ISimulatedSixDofController2.GetThumbstickPosition(out float, out float)
Получите положение имитированного отпечатка на имитированном контроллере.
Параметры
- x — горизонтальное положение отпечатка.
- y - Вертикальная позиция отпечатка.
Microsoft.PerceptionSimulation.ISimulatedSixDofController2.SetThumbstickPosition(float, float)
Задайте положение имитированного отпечатка на имитированном контроллере.
Параметры
- x — горизонтальное положение отпечатка.
- y - Вертикальная позиция отпечатка.
Microsoft.PerceptionSimulation.ISimulatedSixDofController2.BatteryLevel
Получение или установка уровня заряда имитированного контроллера. Значение должно быть больше 0,0 и меньше или равно 100,0.
Microsoft.PerceptionSimulation.ISimulatedEyes
Интерфейс, описывающий глаза имитированного человека.
public interface ISimulatedEyes
{
Rotation3 Rotation { get; set; }
void Rotate(Rotation3 rotation);
SimulatedEyesCalibrationState CalibrationState { get; set; }
Vector3 WorldPosition { get; }
}
Microsoft.PerceptionSimulation.ISimulatedEyes.Rotation
Получите поворот имитированного глаза. Положительные радианы поворачиваются по часовой стрелке при просмотре вдоль оси.
Microsoft.PerceptionSimulation.ISimulatedEyes.Rotate(Microsoft.PerceptionSimulation.Rotation3)
Поворот имитированных глаз относительно текущего поворота. Положительные радианы поворачиваются по часовой стрелке при просмотре вдоль оси.
Параметры
- поворот — величина поворота.
Microsoft.PerceptionSimulation.ISimulatedEyes.CalibrationState
Извлекает или задает состояние калибровки имитированного глаза.
Microsoft.PerceptionSimulation.ISimulatedEyes.WorldPosition
Извлеките положение узла с отношением к миру в метрах.
Microsoft.PerceptionSimulation.ISimulationRecording
Интерфейс для взаимодействия с одной записью, загруженной для воспроизведения.
public interface ISimulationRecording
{
StreamDataTypes DataTypes { get; }
PlaybackState State { get; }
void Play();
void Pause();
void Seek(UInt64 ticks);
void Stop();
};
Microsoft.PerceptionSimulation.ISimulationRecording.DataTypes
Извлекает список типов данных в записи.
Microsoft.PerceptionSimulation.ISimulationRecording.State
Извлекает текущее состояние записи.
Microsoft.PerceptionSimulation.ISimulationRecording.Play
Запустите воспроизведение. Если запись приостановлена, воспроизведение возобновляется из приостановленного расположения; При остановке воспроизведение начнется в начале. Если этот вызов уже играет, этот вызов игнорируется.
Microsoft.PerceptionSimulation.ISimulationRecording.Pause
Приостанавливает воспроизведение в текущем расположении. Если запись остановлена, вызов игнорируется.
Microsoft.PerceptionSimulation.ISimulationRecording.Seek(System.UInt64)
Ищет запись до указанного времени (в интервалах от начала 100-nanoseconds) и приостанавливается в этом расположении. Если время выходит за пределы записи, оно приостановлено на последнем кадре.
Параметры
- галочки - время, к которому нужно искать.
Microsoft.PerceptionSimulation.ISimulationRecording.Stop
Останавливает воспроизведение и сбрасывает положение в начало.
Microsoft.PerceptionSimulation.ISimulationRecordingCallback
Интерфейс для получения изменений состояния во время воспроизведения.
public interface ISimulationRecordingCallback
{
void PlaybackStateChanged(PlaybackState newState);
};
Microsoft.PerceptionSimulation.ISimulationRecordingCallback.PlaybackStateChanged(Microsoft.PerceptionSimulation.PlaybackState)
Вызывается при изменении состояния воспроизведения ISimulationRecording.
Параметры
- newState — новое состояние записи.
Microsoft.PerceptionSimulation.PerceptionSimulationManager
Корневой объект для создания объектов моделирования восприятия.
public static class PerceptionSimulationManager
{
public static IPerceptionSimulationManager CreatePerceptionSimulationManager(ISimulationStreamSink sink);
public static ISimulationStreamSink CreatePerceptionSimulationRecording(string path);
public static ISimulationRecording LoadPerceptionSimulationRecording(string path, ISimulationStreamSinkFactory factory);
public static ISimulationRecording LoadPerceptionSimulationRecording(string path, ISimulationStreamSinkFactory factory, ISimulationRecordingCallback callback);
Microsoft.PerceptionSimulation.PerceptionSimulationManager.CreatePerceptionSimulationManager(Microsoft.PerceptionSimulation.ISimulationStreamSink)
Создайте объект для создания имитированных пакетов и их доставки в предоставленный приемник.
Параметры
- приемник — приемник, который получит все созданные пакеты.
Возвращаемое значение
Созданный диспетчер.
Microsoft.PerceptionSimulation.PerceptionSimulationManager.CreatePerceptionSimulationRecording(System.String)
Создайте приемник, в котором хранятся все полученные пакеты в файле по указанному пути.
Параметры
- path — путь к создаваемому файлу.
Возвращаемое значение
Созданный приемник.
Microsoft.PerceptionSimulation.PerceptionSimulationManager.LoadPerceptionSimulationRecording(System.String,Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory)
Загрузите запись из указанного файла.
Параметры
- path — путь к загружению файла.
- фабрика — фабрика, используемая записью для создания ISimulationStreamSink при необходимости.
Возвращаемое значение
Загруженная запись.
Microsoft.PerceptionSimulation.PerceptionSimulationManager.LoadPerceptionSimulationRecording(System.String,Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory,Microsoft.PerceptionSimulation.ISimulationRecordingCallback)
Загрузите запись из указанного файла.
Параметры
- path — путь к загружению файла.
- фабрика — фабрика, используемая записью для создания ISimulationStreamSink при необходимости.
- обратный вызов — обратный вызов, который получает обновления для изменения состояния записи.
Возвращаемое значение
Загруженная запись.
Microsoft.PerceptionSimulation.StreamDataTypes
Описывает различные типы потоковых данных.
public enum StreamDataTypes
{
None = 0x00,
Head = 0x01,
Hands = 0x02,
SpatialMapping = 0x08,
Calibration = 0x10,
Environment = 0x20,
SixDofControllers = 0x40,
Eyes = 0x80,
DisplayConfiguration = 0x100
All = None | Head | Hands | SpatialMapping | Calibration | Environment | SixDofControllers | Eyes | DisplayConfiguration
}
Microsoft.PerceptionSimulation.StreamDataTypes.None
Значение sentinel, используемое для указания типов данных потока.
Microsoft.PerceptionSimulation.StreamDataTypes.Head
Поток данных для положения и ориентации головы.
Microsoft.PerceptionSimulation.StreamDataTypes.Hands
Поток данных для позиции и жестов рук.
Microsoft.PerceptionSimulation.StreamDataTypes.SpatialMapping
Поток данных для пространственного сопоставления среды.
Microsoft.PerceptionSimulation.StreamDataTypes.Calibration
Поток данных для калибровки устройства. Пакеты калибровки принимаются только системой в удаленном режиме.
Microsoft.PerceptionSimulation.StreamDataTypes.Environment
Поток данных для среды устройства.
Microsoft.PerceptionSimulation.StreamDataTypes.SixDofControllers
Поток данных для контроллеров движения.
Microsoft.PerceptionSimulation.StreamDataTypes.Eyes
Поток данных с глазами имитированного человека.
Microsoft.PerceptionSimulation.StreamDataTypes.DisplayConfiguration
Поток данных с конфигурацией отображения устройства.
Microsoft.PerceptionSimulation.StreamDataTypes.All
Значение sentinel, используемое для указания всех записанных типов данных.
Microsoft.PerceptionSimulation.ISimulationStreamSink
Объект, получающий пакеты данных из потока моделирования.
public interface ISimulationStreamSink
{
void OnPacketReceived(uint length, byte[] packet);
}
Microsoft.PerceptionSimulation.ISimulationStreamSink.OnPacketReceived(uint length, byte[] packet)
Получает один пакет, который является внутренним типизированным и версиям.
Параметры
- длина — длина пакета.
- пакет — данные пакета.
Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory
Объект, создающий ISimulationStreamSink.
public interface ISimulationStreamSinkFactory
{
ISimulationStreamSink CreateSimulationStreamSink();
}
Microsoft.PerceptionSimulation.ISimulationStreamSinkFactory.CreateSimulationStreamSink()
Создает один экземпляр ISimulationStreamSink.
Возвращаемое значение
Созданный приемник.