Почему моя фиксированная голограмма не масштабируется при движении головы? - PullRequest
0 голосов
/ 19 мая 2019

Я размещаю сферу Direct X, используя фиксированную систему координат. Когда я двигаю головой, сферическая голограмма остается на месте. Но это не масштабируется. Он масштабируется, когда я впервые размещаю его с помощью PositionHologramAtGaze () (на основе примера кода).

Нужно ли обрабатывать масштабирование в C ++ / Direct X?

// Код ниже основан на или идентичен коду примера ...

SpatialPointerPose^ pointerPoseStationary = 
SpatialPointerPose::TryGetAtTimestamp(m_stationaryReferenceFrame- 
>CoordinateSystem, prediction->Timestamp);

m_Sphere->PositionHologramAtGaze(pointerPoseStationary, 2.5f);

Сфера отлично рисует и остается на фиксированной мировой позиции, но не масштабируется, когда я смещаю голову / гололинзу дальше.

Например, на этом изображении мы видим человека, смотрящего на голографическую сферу Человека, одетого в гололинзы, смотрящего на голографическую сферу

И то, что они видят, Голографическая сфера глазами пользователя

Теперь пользователь, носящий оборудование hololens, отступает на несколько метров назад:

Человек делает несколько шагов назад

И то, что они должны видеть, это меньшая сфера: Меньшая сфера

Я также наблюдаю это в примере Microsoft здесь:

https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/BasicHologram

Куб вращается, но не меняет размер при движении назад.

1 Ответ

1 голос
/ 27 мая 2019

Я нашел свой ответ.

Пример HolographicFaceTracking использует систему координат относительно очков. Линия 281 SpatialCoordinateSystem ^ currentCoordinateSystem = m_referenceFrame-

GetStationaryCoordinateSystemAtTimestamp (prediction-> Отметка);

Я неправильно понял этот метод как получение "Стационарного", то есть системы координат "Мир". Но «Стационарный» не имеет этого значения в этом контексте.

Это не совсем объясняет, почему куб не будет изменять размер или иметь обратное масштабирование, но, как только я переключился на использование этого кода из примера BasicHologram:

// The simplest way to render world-locked holograms is to create a 
stationary reference frame
// based on a SpatialLocator. This is roughly analogous to creating a "world" 
coordinate system
// with the origin placed at the device's position as the app is launched.
m_stationaryReferenceFrame = m_spatialLocator- 
>CreateStationaryFrameOfReferenceAtCurrentLocation();

, а затем

pose = SpatialPointerPose::TryGetAtTimestamp(m_stationaryReferenceFrame- 
>CoordinateSystem, prediction->Timestamp);

переключение на использование CreateStationaryFrameOfReferenceAtCurrentLocation ()

дает мне "заблокированную по миру" систему координат.

Я думаю, в свою защиту;>) перегрузка слова «стационарный» повсюду немного сбивает с толку, и нужно быть осторожным. Я изменяю свой собственный код, чтобы использовать «мир» и «гарнитуру» для обращения к координатным кадрам, чтобы избежать путаницы ...

Надеюсь, мой ответ здесь поможет кому-то еще ...

...