DirectX'te eller ve hareket denetleyicileri

Not

Bu makale, eski WinRT yerel API'leriyle ilgilidir. Yeni yerel uygulama projeleri için OpenXR API'sini kullanmanızı öneririz.

Windows Mixed Reality'de hem el hem de hareket denetleyicisi girişi, Windows.UI.Input.Spatial ad alanında bulunan uzamsal giriş API'leri aracılığıyla işlenir. Bu, Select gibi yaygın eylemleri hem ellerde hem de hareket denetleyicilerinde aynı şekilde işlemenizi sağlar.

Başlarken

Windows Mixed Reality uzamsal girişe erişmek için SpatialInteractionManager arabirimiyle başlayın. SpatialInteractionManager::GetForCurrentView çağrısı yaparak ( genellikle uygulama başlatma sırasında) bu arabirime erişebilirsiniz.

using namespace winrt::Windows::UI::Input::Spatial;

SpatialInteractionManager interactionManager = SpatialInteractionManager::GetForCurrentView();

SpatialInteractionManager'ın işi, giriş kaynağını temsil eden SpatialInteractionSources'a erişim sağlamaktır. Sistemde üç tür SpatialInteractionSource vardır.

  • El , kullanıcının algılanan elini temsil eder. El kaynakları, HoloLens'te temel hareketlerden HoloLens 2 üzerinde tam olarak ifade edilen el izlemesine kadar farklı özellikler sunar.
  • Denetleyici , eşleştirilmiş bir hareket denetleyicisini temsil eder. Hareket denetleyicileri tetikleyicileri seçme, Menü düğmeleri, Kavrama düğmeleri, dokunmatik yüzeyler ve parmak çubukları gibi farklı özellikler sunabilir.
  • Ses , kullanıcının sesli konuşma sistemi tarafından algılanan anahtar sözcüklerini temsil eder. Örneğin, bu kaynak kullanıcı her "Seç" deyildiğinde bir Select tuşuna ve yayını ekler.

Bir kaynağın kare başına verileri SpatialInteractionSourceState arabirimi tarafından temsil edilir. Uygulamanızda olay odaklı veya yoklama tabanlı bir model kullanmak isteyip istemediğinize bağlı olarak, bu verilere erişmenin iki farklı yolu vardır.

Olay odaklı giriş

SpatialInteractionManager, uygulamanızın dinleyebileceği bir dizi olay sağlar. SourcePressed, [SourceReleased ve SourceUpdated birkaç örnektir.

Örneğin, aşağıdaki kod MyApp::OnSourcePressed adlı bir olay işleyicisini SourcePressed olayına bağlar. Bu, uygulamanızın her tür etkileşim kaynağındaki baskıları algılamasını sağlar.

using namespace winrt::Windows::UI::Input::Spatial;

auto interactionManager = SpatialInteractionManager::GetForCurrentView();
interactionManager.SourcePressed({ this, &MyApp::OnSourcePressed });

Bu basılı olay, basın gerçekleştiği sırada ilgili SpatialInteractionSourceState ile birlikte zaman uyumsuz olarak uygulamanıza gönderilir. Uygulamanız veya oyun altyapınız işlemeye hemen başlamak veya giriş işleme yordamınızda olay verilerini kuyruğa almak isteyebilir. Burada SourcePressed olayı için seç düğmesine basılıp basılmadığını denetleyen bir olay işleyici işlevi verilmiş.

using namespace winrt::Windows::UI::Input::Spatial;

void MyApp::OnSourcePressed(SpatialInteractionManager const& sender, SpatialInteractionSourceEventArgs const& args)
{
	if (args.PressKind() == SpatialInteractionPressKind::Select)
	{
		// Select button was pressed, update app state
	}
}

Yukarıdaki kod yalnızca cihazdaki birincil eyleme karşılık gelen 'Seç' basımını denetler. Örnekler arasında HoloLens'te AirTap yapma veya tetikleyiciyi hareket denetleyicisine çekme sayılabilir. 'Seç' basılması, kullanıcının hedefledikleri hologramı etkinleştirme amacını temsil eder. SourcePressed olayı bir dizi farklı düğme ve hareket için tetiklenir ve bu durumları test etmek için SpatialInteractionSource'ta diğer özellikleri inceleyebilirsiniz.

Yoklama tabanlı giriş

SpatialInteractionManager'ı kullanarak her karedeki girişin geçerli durumunu yoklayabilirsiniz. Bunu yapmak için GetDetectedSourcesAtTimestamp her kareyi çağırarak. Bu işlev, her etkin SpatialInteractionSource için bir SpatialInteractionSourceState içeren bir dizi döndürür. Bu, her etkin hareket denetleyicisi için bir, izlenen her el için bir tane ve yakın zamanda bir 'seç' komutu söylendiyse konuşma için bir tane anlamına gelir. Ardından uygulamanıza giriş yapmak için her SpatialInteractionSourceState üzerindeki özellikleri inceleyebilirsiniz.

Burada yoklama yöntemini kullanarak "seç" eyleminin nasıl denetleneceklerine ilişkin bir örnek verilmiştir. Tahmin değişkeni, HolographicFrame'den alınabilen bir HolographicFramePrediction nesnesini temsil eder.

using namespace winrt::Windows::UI::Input::Spatial;

auto interactionManager = SpatialInteractionManager::GetForCurrentView();
auto sourceStates = m_spatialInteractionManager.GetDetectedSourcesAtTimestamp(prediction.Timestamp());

for (auto& sourceState : sourceStates)
{
	if (sourceState.IsSelectPressed())
	{
		// Select button is down, update app state
	}
}

Her SpatialInteractionSource'un, yeni kaynakları tanımlamak ve mevcut kaynakları çerçeveden kareye ilişkilendirmek için kullanabileceğiniz bir kimliği vardır. Eller her ayrıldığında yeni bir kimlik alır ve FOV'ye girer, ancak denetleyici kimlikleri oturum süresi boyunca statik kalır. Eller cihazın görünümüne girdiğinde veya bıraktığında ya da hareket denetleyicileri açıldığında/kapatıldığında ya da eşlendiğinde/eşleşmediğinde tepki vermek için SourceDetected ve SourceLost gibi SpatialInteractionManager'da olayları kullanabilirsiniz.

Tahmin edilen ve geçmişe dönük pozlar

GetDetectedSourcesAtTimestamp bir zaman damgası parametresine sahiptir. Bu, durum isteğinde bulunmanızı ve tahmin edilen veya geçmişe dönük verileri ortaya çıkarmanızı sağlar ve uzamsal etkileşimleri diğer giriş kaynaklarıyla ilişkilendirmenize olanak tanır. Örneğin, elin geçerli çerçevedeki konumunu oluştururken HolographicFrame tarafından sağlanan tahmin edilen zaman damgasını geçirebilirsiniz. Bu, sistemin el konumunun işlenen çerçeve çıkışıyla yakından hizalanması için ileriye doğru tahminde bulunur ve algılanan gecikme süresini en aza indirir.

Ancak böyle bir tahmin edilen poz, etkileşim kaynağıyla hedefleme için ideal bir işaret ışını oluşturmaz. Örneğin, bir hareket denetleyicisi düğmesine basıldığında, bu olayın Bluetooth üzerinden işletim sistemine kabarcık oluşturması 20 ms'ye kadar sürebilir. Benzer şekilde, bir kullanıcı el hareketi yaptıktan sonra, sistem hareketi algılamadan ve uygulamanız bunu yoklamadan önce bir miktar zaman geçebilir. Uygulamanız durum değişikliğini yoklayana kadar baş ve el, geçmişte gerçekleşen etkileşimi hedeflemek için kullanılır. Geçerli HolographicFrame'inizin zaman damgasını GetDetectedSourcesAtTimestamp'a geçirerek hedeflediyseniz, poz bunun yerine çerçevenin görüntüleneceği sırada hedef ışına iletileceği tahmin edilir ve bu da gelecekte 20 ms'den fazla olabilir. Bu gelecek pozu, etkileşim kaynağını işlemek için iyidir, ancak kullanıcının geçmişteki hedeflemesi gibi etkileşimi hedeflemek için zaman sorunumuzu bir hale ekler.

Neyse ki SourcePressed, [SourceReleased ve SourceUpdated olayları her giriş olayıyla ilişkili geçmiş Durumu sağlar. Bu doğrudan TryGetPointerPose aracılığıyla kullanılabilen geçmiş baş ve el pozlarının yanı sıra, bu olayla bağıntı oluşturmak için diğer API'lere geçirebileceğiniz bir geçmiş Zaman Damgası içerir.

Bu, her çerçeveyi eller ve denetleyicilerle işleme ve hedefleme sırasında aşağıdaki en iyi yöntemlere yol açar:

  • Her kareyi el ile/denetleyiciyle işlemek için uygulamanızın geçerli karenin foton zamanında her etkileşim kaynağının ileriye dönük tahmin edilen pozunu yoklaması gerekir. Her kare için GetDetectedSourcesAtTimestamp çağrısı yaparak tüm etkileşim kaynaklarını yoklayabilir ve HolographicFrame::CurrentPrediction tarafından sağlanan tahmin edilen zaman damgasını geçirebilirsiniz.
  • Bir basın veya yayına el/oyun kumandası hedeflemesi için, uygulamanız basılı/yayınlanmış olayları işlemeli ve bu olay için geçmişe dönük baş veya el pozunu temel alan raycasting yapmalıdır. SourcePressed veya SourceReleased olayını işleyerek, olay bağımsız değişkenlerinden State özelliğini alarak ve ardından TryGetPointerPose yöntemini çağırarak bu hedefleme ışınını alırsınız.

Cihazlar arası giriş özellikleri

SpatialInteractionSource API'sinde çok çeşitli özelliklere sahip denetleyiciler ve el izleme sistemleri desteklenir. Bu özelliklerin bazıları cihaz türleri arasında yaygındır. Örneğin, el izleme ve hareket denetleyicilerinin her ikisi de 'seçme' eylemi ve 3B konum sağlar. Mümkün olan her yerde, API bu ortak özellikleri SpatialInteractionSource'ta aynı özelliklerle eşler. Bu, uygulamaların çok çeşitli giriş türlerini daha kolay desteklemesini sağlar. Aşağıdaki tabloda desteklenen özellikler ve bunların giriş türleri arasında karşılaştırması açıklanmaktadır.

Özellik Açıklama HoloLens(1. nesil) Hareketleri Hareket Denetleyicileri Eklemli Eller
SpatialInteractionSource::Handedness Sağ veya sol el / denetleyici. Desteklenmiyor Desteklenir Desteklenir
SpatialInteractionSourceState::IsSelectPressed Birincil düğmenin geçerli durumu. Hava Musluğu Tetikleyici Rahat Hava Musluğu (dik sıkıştırma)
SpatialInteractionSourceState::IsGrasped Al düğmesinin geçerli durumu. Desteklenmiyor Al düğmesi Sıkıştırma veya Kapalı El
SpatialInteractionSourceState::IsMenuPressed Menü düğmesinin geçerli durumu. Desteklenmiyor Menü Düğmesi Desteklenmiyor
SpatialInteractionSourceLocation::Position Kontrol ünitesinde elin veya kavrama konumunun XYZ konumu. Palmiye konumu Kavrama pozu konumu Palmiye konumu
SpatialInteractionSourceLocation::Orientation Kontrolördeki el veya kavrama pozunun yönünü temsil eden quaternion. Desteklenmiyor Kavrama pozu yönlendirmesi Palmiye yönü
SpatialPointerInteractionSourcePose::Position İşaret ışınının kökeni. Desteklenmiyor Desteklenir Desteklenir
SpatialPointerInteractionSourcePose::ForwardDirection İşaret ışınının yönü. Desteklenmiyor Desteklenir Desteklenir

Yukarıdaki özelliklerden bazıları tüm cihazlarda kullanılamaz ve API bunu test etmek için bir araç sağlar. Örneğin, kaynağın kavrama eylemi sağlayıp sağlamadığını belirlemek için SpatialInteractionSource::IsGraspSupported özelliğini inceleyebilirsiniz.

Kavrama pozu ile işaret eden poz karşılaştırması

Windows Mixed Reality farklı form faktörlerindeki hareket denetleyicilerini destekler. Ayrıca eklemli el izleme sistemlerini de destekler. Bu sistemlerin tümü, el konumu ile uygulamaların kullanıcının elindeki nesneleri yönlendirmek veya işlemek için kullanması gereken doğal "ileri" yön arasında farklı ilişkilere sahiptir. Bunların tümünü desteklemek için, hem el izleme hem de hareket denetleyicileri için sağlanan iki tür 3B poz vardır. Birincisi, kullanıcının el konumunu temsil eden kavrama pozudur. İkincisi, kullanıcının elinden veya denetleyicisinden kaynaklanan bir işaret ışınını temsil eden işaret etme pozudur. Bu nedenle, kullanıcının elini veya kullanıcınınelinde tutulan kılıç veya silah gibi bir nesneyi işlemek istiyorsanız kavrama pozunu kullanın. Örneğin, kullanıcı kullanıcı arabirimini **işaret ederken denetleyiciden veya elden raycast yapmak istiyorsanız, işaret etme pozunu kullanın.

Kavrama pozunaSpatialInteractionSourceState::P roperties::TryGetLocation(...) aracılığıyla erişebilirsiniz. Aşağıdaki gibi tanımlanır:

  • Kavrama konumu: Kumandayı doğal olarak tutarken palmiye merkezi, kavrama içindeki konumu ortalamak için sola veya sağa ayarlanmıştır.
  • Kavrama yönünün Sağ ekseni: Düz bir 5 parmaklı poz oluşturmak için elinizi tamamen açtığınızda, avuç içinize normal olan ışın (sol avuçtan ileri, sağ avuçtan geri)
  • Kavrama yönünün İleri ekseni: Elinizi kısmen kapattığınızda (kumandayı tutuyormuş gibi), parmaksız parmaklarınızın oluşturduğu tüpten "ileri" işaret eden ışın.
  • Kavrama yönünün Yukarı ekseni: Sağ ve İleri tanımları tarafından ima edilen Yukarı ekseni.

İşaretçi pozunuSpatialInteractionSourceState::P roperties::TryGetLocation(...)::SourcePointerPose veya SpatialInteractionSourceState::TryGetPointerPose(...)::TryGetInteractionSourcePose aracılığıyla erişebilirsiniz.

Denetleyiciye özgü giriş özellikleri

Denetleyiciler için SpatialInteractionSource ek özelliklere sahip bir Controller özelliğine sahiptir.

  • HasThumbstick: Doğruysa denetleyicinin bir kontrol çubuğu vardır. Kontrol çubuğu x ve y değerlerini (ThumbstickX ve ThumbstickY) ve basılı durumunu (IsThumbstickPressed) almak için SpatialInteractionSourceState'in ControllerProperties özelliğini inceleyin.
  • HasTouchpad: Doğruysa, denetleyicinin dokunmatik yüzeyi vardır. SpatialInteractionSourceState'in ControllerProperties özelliğini inceleyip dokunmatik yüzey x ve y değerlerini (TouchpadX ve TouchpadY) alın ve kullanıcının tuş takımına dokunup dokunmadıklarını (IsTouchpadTouched) ve dokunmatik yüzeye aşağı (IsTouchpadPressed) basıp basmadığını öğrenin.
  • SimpleHapticsController: Denetleyici için SimpleHapticsController API'si, denetleyicinin haptics özelliklerini incelemenize olanak tanır ve ayrıca dokunsal geri bildirimleri denetlemenize de olanak tanır.

Dokunmatik yüzey ve kontrol çubuğu aralığı her iki eksen için de -1 ile 1 arasındadır (aşağıdan yukarıya ve soldan sağa). SpatialInteractionSourceState::SelectPressedValue özelliği kullanılarak erişilen analog tetikleyici aralığı 0 ile 1 arasında bir aralığa sahiptir. 1 değeri, IsSelectPressed değerinin true değerine eşit olmasıyla ilişkilidir; diğer tüm değerler IsSelectPressed değerinin false değerine eşit olmasıyla ilişkilendirilir.

Eklemli el izleme

Windows Mixed Reality API'sinde, örneğin HoloLens 2 üzerinde ifade edilen el izleme için tam destek sağlanır. Açıkça ifade edilen el izleme, uygulamalarınızda doğrudan işleme ve nokta ve işleme giriş modelleri uygulamak için kullanılabilir. Tamamen özel etkileşimler yazmak için de kullanılabilir.

El iskeleti

Eklemli el izleme, birçok farklı etkileşim türünü sağlayan 25 eklem iskeleti sağlar. İskelet, dizin/orta/halka/küçük parmaklar için beş eklem, başparmak için dört eklem ve bir bilek ekleği sağlar. Bilek ekleği hiyerarşinin tabanı görevi görür. Aşağıdaki resimde iskeletin düzeni gösterilmektedir.

El İskeleti

Çoğu durumda, her eklem temsil eden kemiğe göre adlandırılır. Her eklemde iki kemik bulunduğundan, bu konumdaki çocuk kemiğine göre her bir eklemin adını vermek için bir kural kullanırız. Çocuk kemiği, bilekten daha ilerideki kemik olarak tanımlanır. Örneğin, "Dizin Proksimal" eklemi, dizin proksimal kemiğinin başlangıç konumunu ve bu kemiğin yönünü içerir. Kemiğin bitiş konumunu içermez. Buna ihtiyacınız olursa hiyerarşideki bir sonraki birleşim olan "Dizin Ara" ekleminden alırsınız.

25 hiyerarşik ekleme ek olarak, sistem bir avuç içi eklem sağlar. Avuç içi genellikle iskelet yapısının bir parçası olarak kabul edilmez. Yalnızca elin genel konumunu ve yönlendirmesini elde etmenin kullanışlı bir yolu olarak sağlanır.

Her bağlantı için aşağıdaki bilgiler sağlanır:

Ad Açıklama
Position Eklemin 3B konumu, istenen herhangi bir koordinat sisteminde mevcuttur.
Yön Kemiğin 3B yönlendirmesi, istenen herhangi bir koordinat sisteminde mevcuttur.
Radius Eklem konumunda cildin yüzeyine uzaklık. Parmak genişliğine dayanan doğrudan etkileşimleri veya görselleştirmeleri ayarlamak için kullanışlıdır.
Doğruluk Sistemin bu eklemin bilgileri hakkında ne kadar emin olduğuna dair bir ipucu sağlar.

El iskeleti verilerine SpatialInteractionSourceState üzerindeki bir işlev aracılığıyla erişebilirsiniz. İşlev TryGetHandPose olarak adlandırılır ve HandPose adlı bir nesne döndürür. Kaynak ifade edilmiş elleri desteklemiyorsa, bu işlev null döndürür. Bir HandPose elde ettikten sonra, ilgilendiğiniz eklemin adıyla TryGetJoint'i çağırarak geçerli ortak verileri alabilirsiniz. Veriler JointPose yapısı olarak döndürülür. Aşağıdaki kod, işaret parmağı ucunun konumunu alır. currentState değişkeni SpatialInteractionSourceState örneğini temsil eder.

using namespace winrt::Windows::Perception::People;
using namespace winrt::Windows::Foundation::Numerics;

auto handPose = currentState.TryGetHandPose();
if (handPose)
{
	JointPose joint;
	if (handPose.TryGetJoint(desiredCoordinateSystem, HandJointKind::IndexTip, joint))
	{
		float3 indexTipPosition = joint.Position;

		// Do something with the index tip position
	}
}

El örgü

Zikirli el izleme API'si tamamen deforme edilebilir üçgen el örgüslerine olanak tanır. Bu ağ, el iskeleti ile birlikte gerçek zamanlı olarak deforme olabilir ve görselleştirme ve gelişmiş fizik teknikleri için yararlıdır. El örgüsine erişmek için önce SpatialInteractionSource üzerinde TryCreateHandMeshObserverAsync öğesini çağırarak bir HandMeshObserver nesnesi oluşturmanız gerekir. Bu işlem genellikle ilk kez gördüğünüzde kaynak başına yalnızca bir kez yapılmalıdır. Bu, bir el FOV'ye her girdiğinde handMeshObserver nesnesi oluşturmak için bu işlevi çağıracağınız anlamına gelir. Bu zaman uyumsuz bir işlevdir, bu nedenle burada biraz eşzamanlılık ile ilgilenmeniz gerekir. Kullanılabilir olduğunda, GetTriangleIndices öğesini çağırarak HandMeshObserver nesnesine üçgen dizin arabelleği sorabilirsiniz. Dizinler çerçeve üzerinde çerçeveyi değiştirmez, bu nedenle bunları bir kez alabilir ve kaynağın kullanım ömrü boyunca önbelleğe alabilirsiniz. Endeksler saat yönünde sargı sırasına göre sağlanır.

Aşağıdaki kod, mesh gözlemcisini oluşturmak için ayrılmış bir std::thread oluşturur ve mesh gözlemcisi kullanılabilir olduğunda dizin arabelleği ayıklar. İzlenen bir eli temsil eden SpatialInteractionSourceState örneği olan currentState adlı değişkenden başlar.

using namespace Windows::Perception::People;

std::thread createObserverThread([this, currentState]()
{
    HandMeshObserver newHandMeshObserver = currentState.Source().TryCreateHandMeshObserverAsync().get();
    if (newHandMeshObserver)
    {
		unsigned indexCount = newHandMeshObserver.TriangleIndexCount();
		vector<unsigned short> indices(indexCount);
		newHandMeshObserver.GetTriangleIndices(indices);

        // Save the indices and handMeshObserver for later use - and use a mutex to synchronize access if needed!
     }
});
createObserverThread.detach();

Ayrılmış iş parçacığı başlatmak, zaman uyumsuz çağrıları işlemek için yalnızca bir seçenektir. Alternatif olarak, C++/WinRT tarafından desteklenen yeni co_await işlevselliğini kullanabilirsiniz.

Bir HandMeshObserver nesnesine sahip olduktan sonra, ilgili SpatialInteractionSource'un etkin olduğu süre boyunca onu tutmanız gerekir. Ardından her çerçevede , GetVertexStateForPose çağrısı yaparak ve köşeleri istediğiniz pozu temsil eden handPose örneğini geçirerek eli temsil eden en son köşe arabelleği isteyebilirsiniz. Arabellekteki her köşenin bir konumu ve bir normali vardır. Burada, bir el örgüsünün geçerli köşe kümesini nasıl edinmeye ilişkin bir örnek verilmiştir. Daha önce olduğu gibi currentState değişkeni SpatialInteractionSourceState örneğini temsil eder.

using namespace winrt::Windows::Perception::People;

auto handPose = currentState.TryGetHandPose();
if (handPose)
{
    std::vector<HandMeshVertex> vertices(handMeshObserver.VertexCount());
    auto vertexState = handMeshObserver.GetVertexStateForPose(handPose);
    vertexState.GetVertices(vertices);

    auto meshTransform = vertexState.CoordinateSystem().TryGetTransformTo(desiredCoordinateSystem);
    if (meshTransform != nullptr)
    {
    	// Do something with the vertices and mesh transform, along with the indices that you saved earlier
    }
}

çatı eklemlerinin aksine, el örgü API'si köşeler için bir koordinat sistemi belirtmenize izin vermez. Bunun yerine , HandMeshVertexState köşelerin sağlandığı koordinat sistemini belirtir. Ardından TryGetTransformTo çağrısı yaparak ve istediğiniz koordinat sistemini belirterek bir mesh dönüşümü elde edebilirsiniz. Köşelerle her çalışırken bu mesh dönüşümünü kullanmanız gerekir. Bu yaklaşım özellikle ağı yalnızca işleme amacıyla kullanıyorsanız CPU ek yükünü azaltır.

Bileşik hareketlere bakma ve işleme

Özellikle HoloLens'te (birinci nesil) bakış ve işleme giriş modelini kullanan uygulamalar için Uzamsal Giriş API'si, 'select' olayının üzerinde oluşturulan bileşik hareketleri etkinleştirmek için kullanılabilecek isteğe bağlı bir SpatialGestureRecognizer sağlar. Uygulamalar, SpatialInteractionManager'dan hologramın SpatialGestureRecognizer'sine etkileşimleri yönlendirerek dokunmaları ve yayınları el ile işlemek zorunda kalmadan Dokunma, Tutma, Düzenleme ve Gezinti olaylarını eller, ses ve uzamsal giriş cihazları arasında tekdüzen algılayabilir.

SpatialGestureRecognizer, yalnızca istediğiniz hareketler kümesi arasındaki minimum kesinleştirmeyi yapar. Örneğin, yalnızca Dokunma isteğinde bulunursanız, kullanıcı istediği sürece parmağını basılı tutabilir ve bir Dokunma işlemi yine gerçekleşir. Hem Dokun hem de Tut isteğinde bulunursanız, parmaklarını aşağı tutmanın yaklaşık bir saniyesi geçtikten sonra hareket Ayrı Tutma'ya yükseltir ve Dokunma işlemi artık gerçekleşmez.

SpatialGestureRecognizer'ı kullanmak için SpatialInteractionManager'ın InteractionDetected olayını işleyip burada kullanıma sunulan SpatialPointerPose öğesini alın. Bu pozdan kullanıcının baş bakış ışınını kullanarak hologramlarla kesişin ve kullanıcının neyle etkileşime geçmek istediğini belirlemek için kullanıcının çevresinde çizgiler ortaya çıkar. Ardından olay bağımsız değişkenlerindeki SpatialInteraction öğesini CaptureInteraction yöntemini kullanarak hedef hologramın SpatialGestureRecognizer öğesine yönlendirin. Bu, bu etkileşimi oluşturma zamanında veya TrySetGestureSettings tarafından bu tanıyıcıda ayarlanan SpatialGestureSettings'e göre yorumlamaya başlar.

HoloLens'te (birinci nesil) etkileşimler ve hareketler, hedefledikleri hedefi, elin konumunda işlemek veya etkileşimde bulunmak yerine kullanıcının baş bakışından türetmelidir. Etkileşim başladıktan sonra, el hareketi, Düzenleme veya Gezinti hareketinde olduğu gibi, hareketi denetlemek için kullanılabilir.

Ayrıca bkz.