Как получить вид и матрицы проекции Locatable Camera Hololens из WinRT Windows.Media API

В документации для Hololens приведен пример того, как извлечь вид и матрицы проекции Locatable Camera с помощью Media Foundation API здесь: https://developer.microsoft.com/en-us/windows/mixed-reality/locatable_camera#locating_the_device_camera_in_the_world.

В нем утверждается, что это также возможно с помощью WinRT API, и приводится ссылка на эту справочную документацию: https://docs.microsoft.com/en-us/uwp/api/Windows.Media.Devices.Core.CameraIntrinsics.

Однако у этого класса, похоже, нет API для получения расширенных атрибутов Hololens, только стандартные для Windows Phone, такие как матрица искажений и свойства точечного отверстия.

Документация Hololens неверна и просто невозможно получить метаданные Locatable Camera в WinRT API? Или я что-то упускаю?

Пространственная система координат (третий и последний атрибут метаданных расширенного образца), похоже, доступна как MediaFrameReference.CoordinateSystem (https://docs.microsoft.com/en-us/uwp/api/windows.media.capture.frames.mediaframereference), что еще больше сбивает с толку ...


person rtytgat    schedule 29.03.2017    source источник


Ответы (2)


Вы можете преобразовать захваченный объект CapturedPhoto в IMFGetService интерфейс. Затем вы можете вызвать IMFGetService::GetService < / a> с MF_WRAPPED_SAMPLE_SERVICE в качестве GUID службы, что даст вам собственный _ 5_. Из этого вы можете получить эти 3 атрибута камеры (система координат, преобразование вида и преобразование проекции), как указано в документации.

Теперь вы можете попробовать написать все это на C #, объявив эти интерфейсы вручную, но это было бы намного проще сделать на C ++.

person Sunius    schedule 31.03.2017

У меня была такая же проблема. Система пространственных координат камеры доступна через MediaFrameReference.CoordinateSystem. Но матрица проекции не предлагается в классе MediaFrameReference. Я решил проблему, просмотрев матрицу проекции на карте MediaFrameReference.Properties. Основная идея показана здесь, однако мне нужно было адаптировать код для UWP. Мой рабочий код показан ниже.

EXTERN_GUID(MFSampleExtension_Spatial_CameraProjectionTransform, 0x47f9fcb5, 0x2a02, 0x4f26, 0xa4, 0x77, 0x79, 0x2f, 0xdf, 0x95, 0x88, 0x6a);

MediaFrameReference^ frame = ...; // your frame
auto projectionTransformProperty= (Windows::Foundation::IPropertyValue^)frame->Properties->Lookup(MFSampleExtension_Spatial_CameraProjectionTransform);
Platform::Array<unsigned char>^ projectionMatrixByteArray = ref new Platform::Array<unsigned char>(4*4*4);
projectionTransformProperty->GetUInt8Array(&projectionMatrixByteArray);
float* projectionMatrixValues= reinterpret_cast<float*>(projectionMatrixByteArray->Data);
//projectionMatrixValues now contains the 16 entries of the projection matrix
person koenigvonamburu    schedule 30.08.2017