{"id":431,"date":"2026-03-11T16:52:44","date_gmt":"2026-03-11T15:52:44","guid":{"rendered":"https:\/\/www.youbiquo.eu\/leonardoxr\/?page_id=431"},"modified":"2026-10-09T13:25:11","modified_gmt":"2026-10-09T11:25:11","slug":"features-leonardoxr-sdk","status":"publish","type":"page","link":"https:\/\/www.youbiquo.eu\/leonardoxr\/manuali_duso\/features-leonardoxr-sdk\/","title":{"rendered":"Features \u2014 LeonardoXR SDK"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"431\" class=\"elementor elementor-431\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-85281d7 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"85281d7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d04b0b7 elementor-widget elementor-widget-heading\" data-id=\"d04b0b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Features \u2014 LeonardoXR SDK<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-541389f e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"541389f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-df9a2de e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"df9a2de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69e47bc elementor-widget__width-initial elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"69e47bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;exclude_headings_by_selector&quot;:&quot;footer&quot;,&quot;marker_view&quot;:&quot;bullets&quot;,&quot;icon&quot;:{&quot;value&quot;:&quot;far fa-dot-circle&quot;,&quot;library&quot;:&quot;fa-regular&quot;,&quot;rendered_tag&quot;:&quot;&lt;svg class=\\&quot;e-font-icon-svg e-far-dot-circle\\&quot; viewBox=\\&quot;0 0 512 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;},&quot;no_headings_message&quot;:&quot;Non sono state trovate intestazioni in questa pagina.&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h2 class=\"elementor-toc__header-title\">\n\t\t\t\tFeatures \u2014 LeonardoXR SDK\t\t\t<\/h2>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__69e47bc\" aria-expanded=\"true\" aria-label=\"Apri l&#039;indice dei contenuti\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__69e47bc\" aria-expanded=\"true\" aria-label=\"Chiudi l&#039;indice dei contenuti\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__69e47bc\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<svg class=\"elementor-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-677117a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"677117a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1a4d842 elementor-widget elementor-widget-text-editor\" data-id=\"1a4d842\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"features--leonardoxr-sdk\" class=\"code-line\" dir=\"auto\" data-line=\"0\">Features \u2014 LeonardoXR SDK<\/h2><blockquote class=\"code-line\" dir=\"auto\" data-line=\"2\"><p class=\"code-line\" dir=\"auto\" data-line=\"2\"><strong>Version:<\/strong>\u00a01.0.2\u00a0<strong>Target Device:<\/strong>\u00a0Youbiquo Leonardo XR<br \/><strong>Base SDK:<\/strong>\u00a0Snapdragon Spaces 1.0.4<\/p><\/blockquote><p class=\"code-line\" dir=\"auto\" data-line=\"6\">Questa pagina documenta le features disponibili nell&#8217;SDK LeonardoXR, organizzate in due sezioni:<\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"8\"><li class=\"code-line\" dir=\"auto\" data-line=\"8\"><strong>Snapdragon Spaces Features<\/strong>\u00a0\u2014 funzionalit\u00e0 AR\/XR fornite dalla piattaforma Snapdragon Spaces e accessibili tramite AR Foundation.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"9\"><strong>LeonardoXR Features<\/strong>\u00a0\u2014 funzionalit\u00e0 proprietarie specifiche di Leonardo XR.<\/li><\/ul><hr class=\"code-line\" dir=\"auto\" data-line=\"11\" \/><h3 id=\"snapdragon-spaces-features\" class=\"code-line\" dir=\"auto\" data-line=\"13\">Snapdragon Spaces Features<\/h3><h4 id=\"local-anchors\" class=\"code-line\" dir=\"auto\" data-line=\"15\">Local Anchors<\/h4><h5 id=\"come-abilitare\" class=\"code-line\" dir=\"auto\" data-line=\"17\">Come Abilitare<\/h5><p class=\"code-line\" dir=\"auto\" data-line=\"19\">Vai su\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; OpenXR Feature Groups &gt; Snapdragon Spaces &gt; Spatial Anchors<\/strong>\u00a0e abilita la feature.<\/p><h5 id=\"spaces-anchor-store-script\" class=\"code-line\" dir=\"auto\" data-line=\"21\">Spaces Anchor Store (Script)<\/h5><blockquote class=\"code-line\" dir=\"auto\" data-line=\"23\"><p class=\"code-line\" dir=\"auto\" data-line=\"23\"><strong>Attenzione:<\/strong>\u00a0Guarda intorno all&#8217;ambiente per generare una mappa di tracking migliore e ridurre i tempi di salvataggio\/caricamento. Salvare pi\u00f9 anchor contemporaneamente blocca il main thread \u2014 usa il callback per salvare gli anchor successivi in modo sequenziale.<\/p><\/blockquote><p class=\"code-line\" dir=\"auto\" data-line=\"25\">Questo componente richiede un\u00a0<strong>AR Anchor Manager<\/strong>\u00a0(aggiunto automaticamente se assente). Aggiungi\u00a0<strong>Spaces Anchor Store<\/strong>\u00a0insieme ad\u00a0<strong>AR Anchor Manager<\/strong>\u00a0per salvare gli anchor localmente per le sessioni future.<\/p><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"27\"><span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">Qualcomm.Snapdragon.Spaces<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SpacesAnchorStore<\/span>\n    {\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">ClearStore<\/span>()<\/span>;\n\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SaveAnchor<\/span>(<span class=\"hljs-params\">ARAnchor anchor, <span class=\"hljs-built_in\">string<\/span> anchorName, Action&lt;<span class=\"hljs-built_in\">bool<\/span>&gt; onSavedCallback = <span class=\"hljs-literal\">null<\/span><\/span>)<\/span>;\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SaveAnchor<\/span>(<span class=\"hljs-params\">ARAnchor anchor, Action&lt;<span class=\"hljs-built_in\">bool<\/span>&gt; onSavedCallback = <span class=\"hljs-literal\">null<\/span><\/span>)<\/span>;\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SaveAnchorWithResult<\/span>(<span class=\"hljs-params\">ARAnchor anchor, <span class=\"hljs-built_in\">string<\/span> anchorName, Action&lt;SaveAnchorResult&gt; onSavedCallback = <span class=\"hljs-literal\">null<\/span><\/span>)<\/span>;\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SaveAnchorWithResult<\/span>(<span class=\"hljs-params\">ARAnchor anchor, Action&lt;SaveAnchorResult&gt; onSavedCallback = <span class=\"hljs-literal\">null<\/span><\/span>)<\/span>;\n\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">DeleteSavedAnchor<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> anchorName<\/span>)<\/span>;\n\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">LoadSavedAnchor<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> anchorName, Action&lt;<span class=\"hljs-built_in\">bool<\/span>&gt; onLoadedCallback = <span class=\"hljs-literal\">null<\/span><\/span>)<\/span>;\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">LoadAllSavedAnchors<\/span>(<span class=\"hljs-params\">Action&lt;<span class=\"hljs-built_in\">bool<\/span>&gt; onLoadedCallback = <span class=\"hljs-literal\">null<\/span><\/span>)<\/span>;\n\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">string<\/span>[] <span class=\"hljs-title\">GetSavedAnchorNames<\/span>()<\/span>;\n        <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">string<\/span> <span class=\"hljs-title\">GetSavedAnchorNameFromARAnchor<\/span>(<span class=\"hljs-params\">ARAnchor anchor<\/span>)<\/span>;\n    }\n}\n<\/code><\/pre><h5 id=\"api-reference\" class=\"code-line\" dir=\"auto\" data-line=\"50\">API Reference<\/h5><table class=\"code-line\" dir=\"auto\" data-line=\"52\"><thead class=\"code-line\" dir=\"auto\" data-line=\"52\"><tr class=\"code-line\" dir=\"auto\" data-line=\"52\"><th>Metodo<\/th><th>Descrizione<\/th><\/tr><\/thead><tbody class=\"code-line\" dir=\"auto\" data-line=\"54\"><tr class=\"code-line\" dir=\"auto\" data-line=\"54\"><td><code>ClearStore()<\/code><\/td><td>Pulisce il local anchor storage.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"55\"><td><code>SaveAnchor(...)<\/code><\/td><td>Salva un\u00a0<code>ARAnchor<\/code>\u00a0per nome o hash generato; callback opzionale al completamento.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"56\"><td><code>SaveAnchorWithResult(...)<\/code><\/td><td>Come\u00a0<code>SaveAnchor<\/code>\u00a0ma restituisce un enum\u00a0<code>SaveAnchorResult<\/code>.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"57\"><td><code>DeleteSavedAnchor(name)<\/code><\/td><td>Elimina un anchor salvato per nome.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"58\"><td><code>LoadSavedAnchor(name, ...)<\/code><\/td><td>Carica un anchor dallo storage e prova a localizzarlo; lancia\u00a0<code>ARAnchorManager.anchorsChanged.added<\/code>.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"59\"><td><code>LoadAllSavedAnchors(...)<\/code><\/td><td>Carica tutti gli anchor memorizzati.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"60\"><td><code>GetSavedAnchorNames()<\/code><\/td><td>Restituisce tutti i nomi degli anchor salvati.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"61\"><td><code>GetSavedAnchorNameFromARAnchor(anchor)<\/code><\/td><td>Restituisce il nome di un anchor salvato da un\u00a0<code>ARAnchor<\/code>\u00a0tracciato, o stringa vuota se non salvato.<\/td><\/tr><\/tbody><\/table><h5 id=\"valori-di-saveanchorresult\" class=\"code-line\" dir=\"auto\" data-line=\"63\">Valori di\u00a0<code>SaveAnchorResult<\/code><\/h5><table class=\"code-line\" dir=\"auto\" data-line=\"65\"><thead class=\"code-line\" dir=\"auto\" data-line=\"65\"><tr class=\"code-line\" dir=\"auto\" data-line=\"65\"><th>Valore<\/th><th>Significato<\/th><\/tr><\/thead><tbody class=\"code-line\" dir=\"auto\" data-line=\"67\"><tr class=\"code-line\" dir=\"auto\" data-line=\"67\"><td><code>PENDING<\/code><\/td><td>L&#8217;anchor \u00e8 in attesa di salvataggio.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"68\"><td><code>SAVED<\/code><\/td><td>Salvato con successo.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"69\"><td><code>FAILURE_RUNTIME_ERROR<\/code><\/td><td>Errore di runtime.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"70\"><td><code>FAILURE_STORE_NOT_LOADED<\/code><\/td><td>L&#8217;Anchor Store non \u00e8 riuscito a caricarsi.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"71\"><td><code>FAILURE_INSUFFICIENT_QUALITY<\/code><\/td><td>La qualit\u00e0 della mappa ambientale \u00e8 insufficiente.<\/td><\/tr><\/tbody><\/table><hr class=\"code-line\" dir=\"auto\" data-line=\"73\" \/><h3 id=\"hit-testing\" class=\"code-line\" dir=\"auto\" data-line=\"75\">Hit Testing<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"77\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Hit Testing<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"79\">Usa l&#8217;<strong>AR Raycast Manager<\/strong>\u00a0di AR Foundation (<code>XRRaycastSubsystem<\/code>). Supporta hit testing continuo contro piani e mesh del mondo reale.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"81\"><strong>Come funziona:<\/strong>\u00a0Il sistema proietta un ray dalla camera (o da un punto specificato) e restituisce le intersezioni con le superfici rilevate nell&#8217;ambiente. Ogni hit contiene posizione, normale e tipo di superficie (piano o mesh).<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"83\"><strong>Utilizzo tipico:<\/strong><\/p><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"84\"><span class=\"hljs-comment\">\/\/ Aggiungi ARRaycastManager alla scena tramite XR Origin<\/span>\n<span class=\"hljs-comment\">\/\/ Poi esegui il raycast:<\/span>\nList&lt;ARRaycastHit&gt; hits = <span class=\"hljs-keyword\">new<\/span> List&lt;ARRaycastHit&gt;();\n<span class=\"hljs-keyword\">if<\/span> (raycastManager.Raycast(screenCenter, hits, TrackableType.PlaneWithinPolygon))\n{\n    Pose hitPose = hits[<span class=\"hljs-number\">0<\/span>].pose;\n    <span class=\"hljs-comment\">\/\/ Posiziona contenuto AR a hitPose.position<\/span>\n}\n<\/code><\/pre><blockquote class=\"code-line\" dir=\"auto\" data-line=\"95\"><p class=\"code-line\" dir=\"auto\" data-line=\"95\"><strong>Known Issue:<\/strong>\u00a0<code>ARRaycastHit.trackableId<\/code>\u00a0restituisce sempre\u00a0<code>0-0<\/code>.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"97\" \/><h3 id=\"image-tracking\" class=\"code-line\" dir=\"auto\" data-line=\"99\">Image Tracking<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"101\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Image Tracking<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"103\">Usa l&#8217;<strong>AR Tracked Image Manager<\/strong>\u00a0di AR Foundation (<code>XRImageTrackingSubsystem<\/code>). Supporta librerie di immagini di riferimento statiche e mutabili (runtime). Le modalit\u00e0 di tracking opzionali controllano la frequenza di calcolo.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"105\"><strong>Libreria di immagini statica:<\/strong>\u00a0configurata nell&#8217;Inspector tramite un asset\u00a0<code>XRReferenceImageLibrary<\/code>. Le immagini vengono compilate nel build.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"107\"><strong>Libreria mutabile:<\/strong>\u00a0usa\u00a0<code>MutableRuntimeReferenceImageLibrary<\/code>\u00a0per aggiungere immagini a runtime:<\/p><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"108\"><span class=\"hljs-keyword\">var<\/span> library = trackedImageManager.CreateRuntimeLibrary() <span class=\"hljs-keyword\">as<\/span> MutableRuntimeReferenceImageLibrary;\n<span class=\"hljs-keyword\">await<\/span> library.ScheduleAddImageWithValidationJob(texture, <span class=\"hljs-string\">\"nome-immagine\"<\/span>, <span class=\"hljs-number\">0.1f<\/span>); <span class=\"hljs-comment\">\/\/ 0.1f = larghezza fisica in metri<\/span>\ntrackedImageManager.referenceLibrary = library;\n<\/code><\/pre><hr class=\"code-line\" dir=\"auto\" data-line=\"114\" \/><h3 id=\"plane-detection\" class=\"code-line\" dir=\"auto\" data-line=\"116\">Plane Detection<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"118\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Plane Detection<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"120\">Usa l&#8217;<strong>AR Plane Manager<\/strong>\u00a0di AR Foundation (<code>XRPlaneSubsystem<\/code>). L&#8217;opzione\u00a0<strong>Use Scene Understanding Backend<\/strong>\u00a0\u00e8 abilitata di default. Supporta modalit\u00e0 di rilevamento per controllare il comportamento. I piani con convex hull possono essere abilitati o disabilitati tramite il componente opzionale\u00a0<code>SpacesARPlaneManagerConfig<\/code>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"122\"><strong>Modalit\u00e0 di rilevamento disponibili:<\/strong><\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"123\"><li class=\"code-line\" dir=\"auto\" data-line=\"123\"><code>PlaneDetectionMode.Horizontal<\/code>\u00a0\u2014 rileva solo superfici orizzontali.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"124\"><code>PlaneDetectionMode.Vertical<\/code>\u00a0\u2014 rileva solo superfici verticali.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"125\"><code>PlaneDetectionMode.Horizontal | PlaneDetectionMode.Vertical<\/code>\u00a0\u2014 rileva entrambe.<\/li><\/ul><p class=\"code-line\" dir=\"auto\" data-line=\"127\"><strong>Configurazione del PlaneManager:<\/strong><\/p><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"128\">arPlaneManager.requestedDetectionMode = PlaneDetectionMode.Horizontal | PlaneDetectionMode.Vertical;\n<\/code><\/pre><blockquote class=\"code-line\" dir=\"auto\" data-line=\"132\"><p class=\"code-line\" dir=\"auto\" data-line=\"132\"><strong>Known Issue:<\/strong>\u00a0Plane Detection entra in un loop infinito di triangolazione mesh in AR Foundation 6.0.<br \/><strong>Known Issue (Unity 6 + OpenXR 1.15.1):<\/strong>\u00a0Plane Detection non funziona nelle app Dual Render Fusion.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"135\" \/><h3 id=\"camera-frame-access\" class=\"code-line\" dir=\"auto\" data-line=\"137\">Camera Frame Access<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"139\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Camera Frame Access<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"141\">Usa l&#8217;<strong>AR Camera Manager<\/strong>\u00a0di AR Foundation (<code>XRCameraSubsystem<\/code>). Funzionalit\u00e0 principali:<\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"143\"><li class=\"code-line\" dir=\"auto\" data-line=\"143\">Accesso ai frame camera raw in formato YUV (<code>Y'UV420sp<\/code>) e YUYV \/ YUY2.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"144\"><code>XRCpuImage.GetPlane(int)<\/code>\u00a0per accesso CPU-side all&#8217;immagine.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"145\"><code>XRCpuImage.ConvertAsync<\/code>\u00a0per conversione asincrona.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"146\"><code>ARCameraManager.currentConfiguration<\/code>\u00a0\/\u00a0<code>GetConfigurations<\/code>\u00a0per query sulla risoluzione.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"147\"><code>ARCameraFrameEventArgs.displayMatrix<\/code>\u00a0per la trasformazione del display.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"148\">Accesso al frame RGB accelerato da GPU per dispositivi AiO (tramite OpenGL).<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"149\">Recupero di estrinseci del sensore \/ pose tramite InputBindings.<\/li><\/ul><blockquote class=\"code-line\" dir=\"auto\" data-line=\"151\"><p class=\"code-line\" dir=\"auto\" data-line=\"151\"><strong>Importante:<\/strong>\u00a0Abilita\u00a0<strong>Allow &#8216;unsafe&#8217; Code<\/strong>\u00a0in\u00a0<code>Player Settings &gt; Android &gt; Other Settings &gt; Script Compilation<\/code>\u00a0quando si usa il sample Camera Frame Access. Disabilita\u00a0<code>AR Camera Background<\/code>\u00a0per evitare problemi di rendering.<\/p><\/blockquote><p class=\"code-line\" dir=\"auto\" data-line=\"153\"><strong>Esempio di accesso ai frame YUV:<\/strong><\/p><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"154\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">OnCameraFrameReceived<\/span>(<span class=\"hljs-params\">ARCameraFrameEventArgs args<\/span>)<\/span>\n{\n    <span class=\"hljs-keyword\">if<\/span> (cameraManager.TryAcquireLatestCpuImage(<span class=\"hljs-keyword\">out<\/span> XRCpuImage image))\n    {\n        <span class=\"hljs-keyword\">using<\/span> (image)\n        {\n            <span class=\"hljs-comment\">\/\/ Accedi al piano Y (luminanza)<\/span>\n            XRCpuImage.Plane yPlane = image.GetPlane(<span class=\"hljs-number\">0<\/span>);\n            <span class=\"hljs-comment\">\/\/ yPlane.data contiene i dati grezzi<\/span>\n        }\n    }\n}\n<\/code><\/pre><hr class=\"code-line\" dir=\"auto\" data-line=\"169\" \/><h3 id=\"spatial-meshing\" class=\"code-line\" dir=\"auto\" data-line=\"171\">Spatial Meshing<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"173\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Spatial Meshing<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"175\">Usa l&#8217;<strong>AR Mesh Manager<\/strong>\u00a0di AR Foundation (<code>XRMeshSubsystem<\/code>). Il componente opzionale\u00a0<code>SpacesARMeshManagerConfig<\/code>\u00a0controlla le caratteristiche della mesh e gestisce gli offset di altezza camera per\u00a0<code>TrackingOriginMode.Floor<\/code>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"177\"><strong>Parametri configurabili tramite\u00a0<code>SpacesARMeshManagerConfig<\/code>:<\/strong><\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"178\"><li class=\"code-line\" dir=\"auto\" data-line=\"178\">Densit\u00e0 e granularit\u00e0 della mesh.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"179\">Gestione dell&#8217;offset verticale della camera in modalit\u00e0 Floor.<\/li><\/ul><blockquote class=\"code-line\" dir=\"auto\" data-line=\"181\"><p class=\"code-line\" dir=\"auto\" data-line=\"181\"><strong>Nota:<\/strong>\u00a0Alcune propriet\u00e0 di\u00a0<code>AR Mesh Manager<\/code>\u00a0non sono supportate e generano avvisi a runtime.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"183\" \/><h3 id=\"qr-code-tracking\" class=\"code-line\" dir=\"auto\" data-line=\"185\">QR Code Tracking<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"187\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; QR Code Tracking<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"189\">Usa il componente custom\u00a0<code>SpacesQrCodeManager<\/code>. Supporta pi\u00f9 modalit\u00e0 di tracking per controllare la frequenza di calcolo dell&#8217;algoritmo.<\/p><blockquote class=\"code-line\" dir=\"auto\" data-line=\"191\"><p class=\"code-line\" dir=\"auto\" data-line=\"191\"><strong>Nota:<\/strong>\u00a0Non esiste un subsystem di simulazione editor per QR Code Tracking. Aggira i controlli del subsystem nelle build editor:<\/p><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"193\"><span class=\"hljs-function\"><span class=\"hljs-built_in\">bool<\/span> <span class=\"hljs-title\">CheckSubsystem<\/span>()<\/span>\n{\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">if<\/span> UNITY_EDITOR<\/span>\n    <span class=\"hljs-keyword\">return<\/span> arQrCodeManager.subsystem?.running ?? <span class=\"hljs-literal\">false<\/span>;\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">else<\/span><\/span>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">true<\/span>;\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">endif<\/span><\/span>\n}\n<\/code><\/pre><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"204\" \/><h3 id=\"hand-tracking\" class=\"code-line\" dir=\"auto\" data-line=\"206\">Hand Tracking<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"208\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Hand Tracking<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"210\">L&#8217;Hand Tracking \u00e8 fornito dai pacchetti del plugin QCHT (Qualcomm Hand Tracking). Per LeonardoXR si usa il pacchetto\u00a0<strong>XR Hands<\/strong>\u00a0(v1.7.2) di Unity come layer di accesso ai dati delle giunture, integrato con le estensioni QCHT.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"212\">Il toggle\u00a0<strong>Auto Start<\/strong>\u00a0nelle impostazioni della feature OpenXR controlla se Hand Tracking viene riavviato automaticamente quando gli occhiali si riconnettono dopo una disconnessione.<\/p><blockquote class=\"code-line\" dir=\"auto\" data-line=\"214\"><p class=\"code-line\" dir=\"auto\" data-line=\"214\"><strong>Attenzione:<\/strong>\u00a0Per far funzionare correttamente Hand Tracking su LeonardoXR, l&#8217;opzione\u00a0<strong>Hand Tracking Subsystem<\/strong>\u00a0deve essere attiva in\u00a0<strong>All Features<\/strong>\u00a0di OpenXR.<\/p><\/blockquote><p class=\"code-line\" dir=\"auto\" data-line=\"216\">Per l&#8217;integrazione completa dell&#8217;Hand Tracking con XR Interaction Toolkit, vedi\u00a0<a href=\"https:\/\/file+.vscode-resource.vscode-cdn.net\/Users\/eleonora\/Downloads\/SDKGuide\/06-interaction-package-guides.md\" data-href=\"06-interaction-package-guides.md\">Interaction Package Guides<\/a>.<\/p><hr class=\"code-line\" dir=\"auto\" data-line=\"218\" \/><h3 id=\"foveated-rendering\" class=\"code-line\" dir=\"auto\" data-line=\"220\">Foveated Rendering<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"222\">Abilitare tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Foveated Rendering<\/strong>.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"224\">Il foveated rendering riduce il carico GPU renderizzando la periferia del campo visivo a risoluzione inferiore, concentrando la risoluzione al centro dello sguardo. Le impostazioni di foveation persistono dopo la pausa e la ripresa dell&#8217;applicazione.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"226\"><strong>Livelli di foveation disponibili:<\/strong><\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"227\"><li class=\"code-line\" dir=\"auto\" data-line=\"227\"><code>None<\/code>\u00a0\u2014 nessuna riduzione.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"228\"><code>Low<\/code>\u00a0\u2014 riduzione leggera, impercettibile alla maggior parte degli utenti.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"229\"><code>Medium<\/code>\u00a0\u2014 buon compromesso tra qualit\u00e0 e performance.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"230\"><code>High<\/code>\u00a0\u2014 riduzione massima, consigliata solo per scene con molto contenuto 3D.<\/li><\/ul><hr class=\"code-line\" dir=\"auto\" data-line=\"232\" \/><h3 id=\"leonardoxr-features\" class=\"code-line\" dir=\"auto\" data-line=\"234\">LeonardoXR Features<\/h3><p class=\"code-line\" dir=\"auto\" data-line=\"236\">Le seguenti features sono specifiche di Leonardo XR e non fanno parte della piattaforma Snapdragon Spaces base.<\/p><p class=\"code-line\" dir=\"auto\" data-line=\"238\">Abilitare le LeonardoXR features tramite\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; LeonardoXR feature group<\/strong>.<\/p><hr class=\"code-line\" dir=\"auto\" data-line=\"240\" \/><h4 id=\"dual-camera-access\" class=\"code-line\" dir=\"auto\" data-line=\"242\">Dual Camera Access<\/h4><blockquote class=\"code-line\" dir=\"auto\" data-line=\"244\"><p class=\"code-line\" dir=\"auto\" data-line=\"244\"><strong>\u26a0\ufe0f Documentazione in preparazione.<\/strong><\/p><p class=\"code-line\" dir=\"auto\" data-line=\"246\">Questa feature consente l&#8217;accesso ai frame delle due camere del dispositivo Leonardo XR in modo sincronizzato. La documentazione dettagliata sull&#8217;API, la configurazione e i sample sar\u00e0 disponibile in una prossima versione della guida.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"248\" \/><h4 id=\"qnn-inference-plugin\" class=\"code-line\" dir=\"auto\" data-line=\"250\">QNN Inference Plugin<\/h4><blockquote class=\"code-line\" dir=\"auto\" data-line=\"252\"><p class=\"code-line\" dir=\"auto\" data-line=\"252\"><strong>\u26a0\ufe0f Documentazione in preparazione.<\/strong><\/p><p class=\"code-line\" dir=\"auto\" data-line=\"254\">Questa feature espone le capacit\u00e0 di inferenza neurale hardware di Leonardo XR tramite il Qualcomm Neural Network (QNN) runtime. Permette di eseguire modelli AI\/ML direttamente sull&#8217;NPU del dispositivo. La documentazione dettagliata sull&#8217;API, il workflow di conversione modelli e i sample sar\u00e0 disponibile in una prossima versione della guida.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"256\" \/><h4 id=\"intercept-openxr-function\" class=\"code-line code-active-line\" dir=\"auto\" data-line=\"258\">Intercept OpenXR Function<\/h4><blockquote class=\"code-line\" dir=\"auto\" data-line=\"260\"><p class=\"code-line\" dir=\"auto\" data-line=\"260\"><strong>\u26a0\ufe0f Documentazione in preparazione.<\/strong><\/p><p class=\"code-line\" dir=\"auto\" data-line=\"262\">Questa feature avanzata fornisce un meccanismo per intercettare e sovrascrivere funzioni OpenXR a basso livello. \u00c8 destinata a casi d&#8217;uso specializzati che richiedono controllo diretto sul layer OpenXR. La documentazione dettagliata sull&#8217;utilizzo sar\u00e0 disponibile in una prossima versione della guida.<\/p><\/blockquote>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Features \u2014 LeonardoXR SDK Features \u2014 LeonardoXR SDK Features \u2014 LeonardoXR SDK Version:\u00a01.0.2\u00a0Target Device:\u00a0Youbiquo Leonardo XRBase SDK:\u00a0Snapdragon Spaces 1.0.4 Questa pagina documenta le features disponibili nell&#8217;SDK LeonardoXR, organizzate in due sezioni: Snapdragon Spaces Features\u00a0\u2014 funzionalit\u00e0 AR\/XR fornite dalla piattaforma Snapdragon Spaces e accessibili tramite AR Foundation. LeonardoXR Features\u00a0\u2014 funzionalit\u00e0 proprietarie specifiche di Leonardo XR. Snapdragon Spaces Features Local Anchors Come Abilitare Vai su\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; OpenXR Feature Groups &gt; Snapdragon Spaces &gt; Spatial Anchors\u00a0e abilita la feature. Spaces Anchor Store (Script) Attenzione:\u00a0Guarda intorno all&#8217;ambiente per generare una mappa di tracking migliore e ridurre i tempi di salvataggio\/caricamento. Salvare pi\u00f9 anchor contemporaneamente blocca il main thread \u2014 usa il callback per salvare gli anchor successivi in modo sequenziale. Questo componente richiede un\u00a0AR Anchor Manager\u00a0(aggiunto automaticamente se assente). Aggiungi\u00a0Spaces Anchor Store\u00a0insieme ad\u00a0AR Anchor Manager\u00a0per salvare gli anchor localmente per le sessioni future. namespace Qualcomm.Snapdragon.Spaces { public class SpacesAnchorStore { public void ClearStore(); public void SaveAnchor(ARAnchor anchor, string anchorName, Action&lt;bool&gt; onSavedCallback = null); public void SaveAnchor(ARAnchor anchor, Action&lt;bool&gt; onSavedCallback = null); public void SaveAnchorWithResult(ARAnchor anchor, string anchorName, Action&lt;SaveAnchorResult&gt; onSavedCallback = null); public void SaveAnchorWithResult(ARAnchor anchor, Action&lt;SaveAnchorResult&gt; onSavedCallback = null); public void DeleteSavedAnchor(string anchorName); public void LoadSavedAnchor(string anchorName, Action&lt;bool&gt; onLoadedCallback = null); public void LoadAllSavedAnchors(Action&lt;bool&gt; onLoadedCallback = null); public string[] GetSavedAnchorNames(); public string GetSavedAnchorNameFromARAnchor(ARAnchor anchor); } } API Reference Metodo Descrizione ClearStore() Pulisce il local anchor storage. SaveAnchor(&#8230;) Salva un\u00a0ARAnchor\u00a0per nome o hash generato; callback opzionale al completamento. SaveAnchorWithResult(&#8230;) Come\u00a0SaveAnchor\u00a0ma restituisce un enum\u00a0SaveAnchorResult. DeleteSavedAnchor(name) Elimina un anchor salvato per nome. LoadSavedAnchor(name, &#8230;) Carica un anchor dallo storage e prova a localizzarlo; lancia\u00a0ARAnchorManager.anchorsChanged.added. LoadAllSavedAnchors(&#8230;) Carica tutti gli anchor memorizzati. GetSavedAnchorNames() Restituisce tutti i nomi degli anchor salvati. GetSavedAnchorNameFromARAnchor(anchor) Restituisce il nome di un anchor salvato da un\u00a0ARAnchor\u00a0tracciato, o stringa vuota se non salvato. Valori di\u00a0SaveAnchorResult Valore Significato PENDING L&#8217;anchor \u00e8 in attesa di salvataggio. SAVED Salvato con successo. FAILURE_RUNTIME_ERROR Errore di runtime. FAILURE_STORE_NOT_LOADED L&#8217;Anchor Store non \u00e8 riuscito a caricarsi. FAILURE_INSUFFICIENT_QUALITY La qualit\u00e0 della mappa ambientale \u00e8 insufficiente. Hit Testing Abilitare tramite\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Hit Testing. Usa l&#8217;AR Raycast Manager\u00a0di AR Foundation (XRRaycastSubsystem). Supporta hit testing continuo contro piani e mesh del mondo reale. Come funziona:\u00a0Il sistema proietta un ray dalla camera (o da un punto specificato) e restituisce le intersezioni con le superfici rilevate nell&#8217;ambiente. Ogni hit contiene posizione, normale e tipo di superficie (piano o mesh). Utilizzo tipico: \/\/ Aggiungi ARRaycastManager alla scena tramite XR Origin \/\/ Poi esegui il raycast: List&lt;ARRaycastHit&gt; hits = new List&lt;ARRaycastHit&gt;(); if (raycastManager.Raycast(screenCenter, hits, TrackableType.PlaneWithinPolygon)) { Pose hitPose = hits[0].pose; \/\/ Posiziona contenuto AR a hitPose.position } Known Issue:\u00a0ARRaycastHit.trackableId\u00a0restituisce sempre\u00a00-0. Image Tracking Abilitare tramite\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Image Tracking. Usa l&#8217;AR Tracked Image Manager\u00a0di AR Foundation (XRImageTrackingSubsystem). Supporta librerie di immagini di riferimento statiche e mutabili (runtime). Le modalit\u00e0 di tracking opzionali controllano la frequenza di calcolo. Libreria di immagini statica:\u00a0configurata nell&#8217;Inspector tramite un asset\u00a0XRReferenceImageLibrary. Le immagini vengono compilate nel build. Libreria mutabile:\u00a0usa\u00a0MutableRuntimeReferenceImageLibrary\u00a0per aggiungere immagini a runtime: var library = trackedImageManager.CreateRuntimeLibrary() as MutableRuntimeReferenceImageLibrary; await library.ScheduleAddImageWithValidationJob(texture, &#8220;nome-immagine&#8221;, 0.1f); \/\/ 0.1f = larghezza fisica in metri trackedImageManager.referenceLibrary = library; Plane Detection Abilitare tramite\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Plane Detection. Usa l&#8217;AR Plane Manager\u00a0di AR Foundation (XRPlaneSubsystem). L&#8217;opzione\u00a0Use Scene Understanding Backend\u00a0\u00e8 abilitata di default. Supporta modalit\u00e0 di rilevamento per controllare il comportamento. I piani con convex hull possono essere abilitati o disabilitati tramite il componente opzionale\u00a0SpacesARPlaneManagerConfig. Modalit\u00e0 di rilevamento disponibili: PlaneDetectionMode.Horizontal\u00a0\u2014 rileva solo superfici orizzontali. PlaneDetectionMode.Vertical\u00a0\u2014 rileva solo superfici verticali. PlaneDetectionMode.Horizontal | PlaneDetectionMode.Vertical\u00a0\u2014 rileva entrambe. Configurazione del PlaneManager: arPlaneManager.requestedDetectionMode = PlaneDetectionMode.Horizontal | PlaneDetectionMode.Vertical; Known Issue:\u00a0Plane Detection entra in un loop infinito di triangolazione mesh in AR Foundation 6.0.Known Issue (Unity 6 + OpenXR 1.15.1):\u00a0Plane Detection non funziona nelle app Dual Render Fusion. Camera Frame Access Abilitare tramite\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Camera Frame Access. Usa l&#8217;AR Camera Manager\u00a0di AR Foundation (XRCameraSubsystem). Funzionalit\u00e0 principali: Accesso ai frame camera raw in formato YUV (Y&#8217;UV420sp) e YUYV \/ YUY2. XRCpuImage.GetPlane(int)\u00a0per accesso CPU-side all&#8217;immagine. XRCpuImage.ConvertAsync\u00a0per conversione asincrona. ARCameraManager.currentConfiguration\u00a0\/\u00a0GetConfigurations\u00a0per query sulla risoluzione. ARCameraFrameEventArgs.displayMatrix\u00a0per la trasformazione del display. Accesso al frame RGB accelerato da GPU per dispositivi AiO (tramite OpenGL). Recupero di estrinseci del sensore \/ pose tramite InputBindings. Importante:\u00a0Abilita\u00a0Allow &#8216;unsafe&#8217; Code\u00a0in\u00a0Player Settings &gt; Android &gt; Other Settings &gt; Script Compilation\u00a0quando si usa il sample Camera Frame Access. Disabilita\u00a0AR Camera Background\u00a0per evitare problemi di rendering. Esempio di accesso ai frame YUV: void OnCameraFrameReceived(ARCameraFrameEventArgs args) { if (cameraManager.TryAcquireLatestCpuImage(out XRCpuImage image)) { using (image) { \/\/ Accedi al piano Y (luminanza) XRCpuImage.Plane yPlane = image.GetPlane(0); \/\/ yPlane.data contiene i dati grezzi } } } Spatial Meshing Abilitare tramite\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Spatial Meshing. Usa l&#8217;AR Mesh Manager\u00a0di AR Foundation (XRMeshSubsystem). Il componente opzionale\u00a0SpacesARMeshManagerConfig\u00a0controlla le caratteristiche della mesh e gestisce gli offset di altezza camera per\u00a0TrackingOriginMode.Floor. Parametri configurabili tramite\u00a0SpacesARMeshManagerConfig: Densit\u00e0 e granularit\u00e0 della mesh. Gestione dell&#8217;offset verticale della camera in modalit\u00e0 Floor. Nota:\u00a0Alcune propriet\u00e0 di\u00a0AR Mesh Manager\u00a0non sono supportate e generano avvisi a runtime. QR Code Tracking Abilitare tramite\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; QR Code Tracking. Usa il componente custom\u00a0SpacesQrCodeManager. Supporta pi\u00f9 modalit\u00e0 di tracking per controllare la frequenza di calcolo dell&#8217;algoritmo. Nota:\u00a0Non esiste un subsystem di simulazione editor per QR Code Tracking. Aggira i controlli del subsystem nelle build editor: bool CheckSubsystem() { #if UNITY_EDITOR return arQrCodeManager.subsystem?.running ?? false; #else return true; #endif } Hand Tracking Abilitare tramite\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Snapdragon Spaces &gt; Hand Tracking. L&#8217;Hand Tracking \u00e8 fornito dai pacchetti del plugin QCHT (Qualcomm Hand Tracking). Per LeonardoXR si usa il pacchetto\u00a0XR Hands\u00a0(v1.7.2) di Unity come layer di accesso ai dati delle giunture, integrato con le estensioni QCHT. Il toggle\u00a0Auto Start\u00a0nelle impostazioni della feature OpenXR controlla se Hand Tracking viene riavviato automaticamente quando gli occhiali si riconnettono dopo una disconnessione. Attenzione:\u00a0Per far funzionare<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":7,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-431","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/comments?post=431"}],"version-history":[{"count":4,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/431\/revisions"}],"predecessor-version":[{"id":438,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/431\/revisions\/438"}],"up":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/7"}],"wp:attachment":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/media?parent=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}