XR_ANDROID_scene_meshing

Name String

XR_ANDROID_scene_meshing

Uzantı Türü

Örnek uzantısı

Kayıtlı Uzantı Numarası

719

Düzeltme

3

Onay durumu

Onaylanmadı

Uzantı ve Sürüm Bağımlılıkları

OpenXR 1.0

Son Değiştirilme Tarihi

2025-05-15

IP Durumu

Bilinen IP hak talebi yok.

Katkıda bulunanlar

Spencer Quin, Google
Jared Finder, Google
Antonio Fontan, Google
Cairn Overturf, Google
Nihav Jain, Google
Salar Khan, Google
Sebastian Klose, Google
Jürgen Sturm, Google
Vinny DaSilva, Google
Ricardo Campbell, Google

Genel Bakış

Bu uzantı, kullanıcının ortamındaki fiziksel nesneleri yaklaşık olarak temsil eden ağlar sağlamayı amaçlar.

Uygulamalar, sahneyi görselleştirmek ve sanal nesnelerin çarpışma gibi fiziksel nesnelerle etkileşime girmesine izin vermek için bu uzantıyı kullanabilir.

Sahne ağı verileri, çalışma zamanı tarafından oluşturulur ve XrSceneMeshingTrackerANDROID ile XrSceneMeshSnapshotANDROID kullanılarak uygulama ile paylaşılır . Uygulamalar, xrGetAllSubmeshStatesANDROID işlevinden döndürülen XrSceneSubmeshStateANDROID aracılığıyla sahne alt ağ bilgileri içindeki değerlere erişebilir . Uygulamalar, xrGetSubmeshDataANDROID işlevinden döndürülen XrSceneSubmeshDataANDROID aracılığıyla sahne alt ağ verilerindeki değerlere erişebilir .

Sahne ağı verileri, hassas kişisel bilgilerdir ve kişisel gizlilik ile bütünlükle yakından bağlantılıdır. Sahne ağı verilerini depolayan veya aktaran uygulamaların, bunu yapabilmek için her zaman kullanıcıdan etkin ve belirli bir kabul istemesi önemle tavsiye edilir.

İzinler

Android uygulamalarının manifest dosyalarında android.permission.SCENE_UNDERSTANDING_FINE izni listelenmelidir. android.permission.SCENE_UNDERSTANDING_FINE izni, çalışma zamanının kullanıcı ortamını incelemesine olanak tanıdığı için hassas bilgilere erişim izni olarak kabul edilir.

Uygulama, bu işlevleri kullanmak için çalışma zamanında izni istemelidir:

(koruma düzeyi: tehlikeli)

Sistem kapasitesini inceleme

XrSystemSceneMeshingPropertiesANDROID yapısı şu şekilde tanımlanır:

typedef struct XrSystemSceneMeshingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsSceneMeshing;
} XrSystemSceneMeshingPropertiesANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • supportsSceneMeshing , sistemin sahne birleştirmeyi destekleyip desteklemediğini gösteren bir XrBool32.

Bir uygulama, xrGetSystemProperties çağrılırken XrSystemSceneMeshingPropertiesANDROID yapısını XrSystemProperties'e zincirleyerek sistemin sahne ağ oluşturma özelliğine sahip olup olmadığını inceleyebilir .

Bir çalışma zamanı supportsSceneMeshing için XR_FALSE döndürürse sistem sahne birleştirme özelliğini desteklemez ve bu nedenle xrCreateSceneMeshingTrackerANDROID işlevinden XR_ERROR_FEATURE_UNSUPPORTED döndürmesi gerekir . Uygulama, supportsSceneMeshing değeri XR_FALSE olduğunda sahne birleştirme işlevini kullanmaktan kaçınmalıdır .

Bir çalışma zamanı, supportsSceneMeshing için XR_TRUE döndürürse sistem, sahne ağını destekler.

Geçerli Kullanım (Dolaylı)

XrSceneMeshSemanticLabelSetANDROID numaralandırması, sahne ağı oluşturma için anlamsal etiket kümelerini açıklar. Bu enum'daki her değer, anlamsal etiketleri içeren başka bir enum'u temsil eder. Örneğin, XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID değeri XrSceneMeshSemanticLabelANDROID kümesini temsil eder .

typedef enum XrSceneMeshSemanticLabelSetANDROID {
    XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID = 0,
    XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID = 1,
    XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;

Numaralandırma değerleri aşağıdaki anlamlara sahiptir:

Enum Açıklaması

XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID

Bu anlamsal etiket grubu, anlamsal etiketlerin olmadığını gösterir.

XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID

Bu anlamsal etiket kümesi, XrSceneMeshSemanticLabelANDROID'i temsil eder.

xrEnumerateSupportedSemanticLabelSetsANDROID işlevi şu şekilde tanımlanır:

XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    supportedSemanticLabelSetsInputCapacity,
    uint32_t*                                   supportedSemanticLabelSetsOutputCount,
    XrSceneMeshSemanticLabelSetANDROID*         supportedSemanticLabelSets);

Parametre Açıklamaları

  • instance, uygulama tarafından oluşturulan bir XrInstance'tır.
  • systemId, XrSystemId xrGetSystem işlevinden yeniden deneniyor .
  • supportedSemanticLabelSetsInputCapacity , supportedSemanticLabelSets kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • supportedSemanticLabelSetsOutputCount, yazılan supportedSemanticLabelSets sayısının işaretçisidir veya supportedSemanticLabelSetsInputCapacity yetersizse gerekli kapasitenin işaretçisidir.
  • supportedSemanticLabelSets, XrSceneMeshSemanticLabelSetANDROID dizisinin işaretçisidir . supportedSemanticLabelSetsInputCapacity 0 ise sonuç NULL olabilir.
  • Gerekli supportedSemanticLabelSets boyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.

Uygulama, xrEnumerateSupportedSemanticLabelSetsANDROID işlevini kullanarak sistem tarafından desteklenen anlamsal etiket kümelerini numaralandırabilir.

Bu enum değeri, anlamsal etiket kümesi olmadığını temsil ettiğinden ve uygulamanın köşe anlambilimine ihtiyacı olmadığı durumlarda kullanılabildiğinden her sistem en azından XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROIDdesteklemelidir.

Geçerli Kullanım (Dolaylı)

  • xrEnumerateSupportedSemanticLabelSetsANDROID çağrılmadan önce XR_ANDROID_scene_meshing uzantısı etkinleştirilmelidir.
  • instance geçerli bir XrInstance işleyeni olmalıdır.
  • supportedSemanticLabelSetsOutputCount, uint32_t değerine yönelik bir işaretçi olmalıdır.
  • supportedSemanticLabelSetsInputCapacity, 0 değilse supportedSemanticLabelSets, supportedSemanticLabelSetsInputCapacity XrSceneMeshSemanticLabelSetANDROID değerleri dizisine yönelik bir işaretçi olmalıdır.

Dönüş Kodları

Başarılı

  • XR_SUCCESS

Hata

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Sahne birleştirme takip aracı oluşturma

XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)

XrSceneMeshingTrackerANDROID işleyici, sahne meshing için bir sahne meshing izleyiciyi ve ilgili kaynakları yönetmeyi temsil eder.

Bu tutma yeri, bu uzantıda xrCreateSceneMeshSnapshotANDROID kullanılarak sahne ağı anlık görüntüsü oluşturmak için kullanılabilir.

xrCreateSceneMeshingTrackerANDROID işlevi şu şekilde tanımlanır:

XrResult xrCreateSceneMeshingTrackerANDROID(
    XrSession                                   session,
    const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
    XrSceneMeshingTrackerANDROID*               tracker);

Parametre Açıklamaları

Bir uygulama, xrCreateSceneMeshingTrackerANDROID işlevini kullanarak XrSceneMeshingTrackerANDROID tutacağı oluşturabilir.

Sistem, sahne birleştirme özelliğini desteklemiyorsa çalışma zamanı, xrCreateSceneMeshingTrackerANDROID işlevinden XR_ERROR_FEATURE_UNSUPPORTED değerini döndürmelidir . Bu durumda, uygulamanın sahne ağı izleyici oluşturmasını önlemek için xrGetSystemProperties işlevi çağrıldığında çalışma zamanı XrSystemSceneMeshingPropertiesANDROID :: supportsSceneMeshing için XR_FALSE değerini döndürmelidir.

Uygulama, sahne ağı izleyici oluştururken XrSceneMeshingTrackerCreateInfoANDROID :: semanticLabelSet içinde yalnızca sistem tarafından desteklenen semantik etiket kümelerini kullanmalıdır. Uygulama, desteklenmeyen bir sahne ağı köşe noktası anlamsal etiket kümesi kullanıyorsa çalışma zamanı, xrCreateSceneMeshingTrackerANDROID işlevinden XR_ERROR_FEATURE_UNSUPPORTED değerini döndürmelidir.

Uygulama, xrEnumerateSupportedSemanticLabelSetsANDROID işleviyle desteklenen anlamsal etiket kümelerinin listesini numaralandırabilir.

xrCreateSceneMeshingTrackerANDROID işleyici, sahne ağ oluşturmayla ilgili tüm kaynaklara sahiptir. Sahne ağı oluşturma deneyimi tamamlandıktan sonra uygulama, xrDestroySceneMeshingTrackerANDROID işlevi aracılığıyla tanıtıcıyı kaldırmalıdır.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • XR_ERROR_FEATURE_UNSUPPORTED
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

XrSceneMeshingTrackerCreateInfoANDROID yapısı şu şekilde tanımlanır:

typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
    XrStructureType                       type;
    const void*                           next;
    XrSceneMeshSemanticLabelSetANDROID    semanticLabelSet;
    XrBool32                              enableNormals;
} XrSceneMeshingTrackerCreateInfoANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • semanticLabelSet, sahne ağ oluşturma için kullanılacak semantik etiket grubunu belirtmek üzere kullanılan bir XrSceneMeshSemanticLabelSetANDROID'dir. Bu değer XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID olarak ayarlanırsa çalışma zamanı , XrSceneSubmeshDataANDROID :: vertexSemantics arabellek alanını yoksayar.
  • enableNormals, sahne ağı verileri alınırken sahne ağı arabelleğindeki ağ köşeleri için köşe normallerinin dahil edilip edilmeyeceğini belirtmek üzere kullanılan bir XrBool32'dir.

XrSceneMeshingTrackerCreateInfoANDROID yapısı, XrSceneMeshingTrackerANDROID tutacını oluşturmak için gereken bilgileri açıklar.

Geçerli Kullanım (Dolaylı)

xrDestroySceneMeshingTrackerANDROID işlevi şu şekilde tanımlanır:

XrResult xrDestroySceneMeshingTrackerANDROID(
    XrSceneMeshingTrackerANDROID                tracker);

Parametre Açıklamaları

xrDestroySceneMeshingTrackerANDROID işlevi, sahne ağı deneyimleri tamamlandığında tracker ve temel kaynakları serbest bırakır.

Geçerli Kullanım (Dolaylı)

İş Parçacığı Güvenliği (Thread Safety)

  • tracker ve tüm alt tutma yerlerine erişim, harici olarak senkronize edilmelidir.

Dönüş Kodları

Başarılı

  • XR_SUCCESS

Hata

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Sahne ağı anlık görüntü tutma yeri oluşturma

XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)

XrSceneMeshSnapshotANDROID işleyici, sahne ağı anlık görüntüsünü temsil eder. Bu anlık görüntü, işlev çağrısı sırasında sahne ağı verilerinin anlık görüntüsünü alan xrCreateSceneMeshSnapshotANDROID kullanılarak oluşturulur.

Bu işleyici, xrGetAllSubmeshStatesANDROID ve xrGetSubmeshDataANDROID kullanılarak alt ağ bilgileri ve verilerini almak için kullanılabilir .

xrCreateSceneMeshSnapshotANDROID işlevi şu şekilde tanımlanır:

XrResult xrCreateSceneMeshSnapshotANDROID(
    XrSceneMeshingTrackerANDROID                tracker,
    const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
    XrSceneMeshSnapshotCreationResultANDROID*   outSnapshotCreationResult);

Parametre Açıklamaları

Uygulama, sahne ağı izleyicisinden sahne ağı anlık görüntüsü oluşturmak için xrCreateSceneMeshSnapshotANDROID işlevini kullanabilir. Bu işlev, XrSceneMeshSnapshotCreationResultANDROID yapısına sarılmış XrSceneMeshTrackingStateANDROID ile birlikte bir XrSceneMeshSnapshotANDROID tutma yerini döndürür. Tutma yeri, teknik olarak oluşturma sırasında sahne ağı verilerinin anlık görüntüsüdür. Bu işleyici, sırasıyla xrGetAllSubmeshStatesANDROID ve xrGetSubmeshDataANDROID kullanılarak sahne ağı bilgilerini ve verilerini sorgulamak için kullanılabilir.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID

XrSceneMeshSnapshotCreateInfoANDROID yapısı şu şekilde tanımlanır:

typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            baseSpace;
    XrTime             time;
    XrBoxf             boundingBox;
} XrSceneMeshSnapshotCreateInfoANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • baseSpace, sahne alt ağı duruş bilgilerinin temsil edildiği bir XrSpace'tir.
  • time, sahne ağı işlenirken veya görüntülenirken geçen süreyi açıklayan XrTime değeridir. Genellikle XrFrameState :: predictedDisplayTime olur.
  • boundingBox, sahne ağının elde edileceği sınırlayıcı kutuyu açıklayan bir XrBoxf'dir.

XrSceneMeshSnapshotCreateInfoANDROID yapısı, XrSceneMeshSnapshotANDROID tutacını oluşturmak için gereken bilgileri açıklar.

Geçerli Kullanım (Dolaylı)

XrSceneMeshSnapshotCreationResultANDROID yapısı şu şekilde tanımlanır:

typedef struct XrSceneMeshSnapshotCreationResultANDROID {
    XrStructureType                    type;
    const void*                        next;
    XrSceneMeshSnapshotANDROID         snapshot;
    XrSceneMeshTrackingStateANDROID    trackingState;
} XrSceneMeshSnapshotCreationResultANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • snapshot, çalışma zamanı tarafından oluşturulan bir XrSceneMeshSnapshotANDROID tutamağıdır.
  • trackingState, anlık görüntü oluşturma sırasında sahne ağı izleyicinin durumunu açıklayan bir XrSceneMeshTrackingStateANDROID'dir.

XrSceneMeshSnapshotCreationResultANDROID yapısı, xrCreateSceneMeshSnapshotANDROID işlevinden döndürülen sahne ağı anlık görüntüsü oluşturma işleminin sonucunu saklar .

Geçerli Kullanım (Dolaylı)

XrSceneMeshTrackingStateANDROID numaralandırması, sahne ağı izleyicinin izleme durumunu açıklar. Bu numaralandırmadaki her değer, sahne ağı izleyicinin bir durumunu temsil eder.

typedef enum XrSceneMeshTrackingStateANDROID {
    XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID = 0,
    XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID = 1,
    XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID = 2,
    XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID = 3,
    XR_SCENE_MESH_TRACKING_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshTrackingStateANDROID;

Numaralandırma değerleri aşağıdaki anlamlara sahiptir:

Enum Açıklaması

XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID

İzleyici henüz mesh verileri sağlamaya hazır değil.

XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID

İzleyici aktif olarak izleme yapıyordur.

XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID

Takip cihazı, son ağ güncellemesinden bu yana geçerli ölçümlerin entegre edilmesini bekliyor.

XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID

Takip cihazı, birden fazla döngü boyunca geçerli ölçümler almadı ve hata durumunda.

Bu durum yalnızca uygulamaya ek bilgi olarak sunulur. Başka hata kaynakları yoksa çalışma zamanı, izleyicinin mevcut XrSceneMeshTrackingStateANDROID durumundan bağımsız olarak uygulamanın anlık görüntüler oluşturmasına ve bunlardan veri almasına izin vermeye devam etmelidir. Durum XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID değilse anlık görüntüler güncel olmayabilir veya boş olabilir.

Sahne ağı anlık görüntüsünden sahne ağı verilerini edinme

xrGetAllSubmeshStatesANDROID işlevi şu şekilde tanımlanır:

XrResult xrGetAllSubmeshStatesANDROID(
    XrSceneMeshSnapshotANDROID                  snapshot,
    uint32_t                                    submeshStateCapacityInput,
    uint32_t*                                   submeshStateCountOutput,
    XrSceneSubmeshStateANDROID*                 submeshStates);

Parametre Açıklamaları

  • snapshot, daha önce xrCreateSceneMeshSnapshotANDROID ile oluşturulmuş bir XrSceneMeshSnapshotANDROID tutamacıdır .
  • submeshStateCapacityInput , submeshStates kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • submeshStateCountOutput, yazılan submeshStates sayısının işaretçisidir veya submeshStateCapacityInput yetersizse gerekli kapasitenin işaretçisidir.
  • submeshStates, çalışma zamanının sahne ağındaki tüm alt ağların durumunu çıkış olarak vereceği XrSceneSubmeshStateANDROID yapıları dizisine yönelik bir işaretçidir. submeshStateCapacityInput 0 ise sonuç NULL olabilir.
  • Gerekli submeshStates boyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.

Uygulama, sahne ağındaki tüm alt ağların durumunu almak için xrGetAllSubmeshStatesANDROID işlevini kullanabilir. Bu, uygulamanın veri istediği alt ağları seçmesine olanak tanıyan temel bilgileri içerir.

Geçerli Kullanım (Dolaylı)

  • xrGetAllSubmeshStatesANDROID çağrılmadan önce XR_ANDROID_scene_meshing uzantısı etkinleştirilmelidir.
  • snapshot geçerli bir XrSceneMeshSnapshotANDROID işleyeni olmalıdır.
  • submeshStateCountOutput, uint32_t değerine yönelik bir işaretçi olmalıdır.
  • submeshStateCapacityInput, 0 değilse submeshStates, submeshStateCapacityInput XrSceneSubmeshStateANDROID yapılarından oluşan bir dizinin işaretçisi olmalıdır.

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

XrSceneSubmeshStateANDROID yapısı şu şekilde tanımlanır:

typedef struct XrSceneSubmeshStateANDROID {
    XrStructureType    type;
    void*              next;
    XrUuid             submeshId;
    XrTime             lastUpdatedTime;
    XrPosef            submeshPoseInBaseSpace;
    XrExtent3Df        bounds;
} XrSceneSubmeshStateANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • submeshId, alt ağı tanımlayan bir XrUuid'dir.
  • lastUpdatedTime, alt ağın en son güncellendiği zamanı gösteren bir XrTime'dir.
  • submeshPoseInBaseSpace, sahne ağı anlık görüntüsü oluşturmak için kullanılan temel alandaki alt ağın pozunu temsil eden bir XrPosef'dir. Poz, alt ağ sınırlayıcı kutusunun da merkezidir.
  • bounds, alt ağı çevreleyen sınırlayıcı kutunun boyutlarını açıklayan bir XrExtent3Df'dir. Bu sınır, sahne ağı tutacını oluşturmak için kullanılan temel alanda tanımlanır.

Çalışma zamanı, submeshId öğesini alt ağın kapladığı fiziksel alanın bölgesiyle eşlemek için elinden geleni yapar. Çalışma zamanları bu eşlemeyi istediği zaman kaybedebilir ve algılanan alt ağların herhangi bir alt kümesine yeni bir UUID atayabilir. Özellikle, sonraki uygulama örneklerinde aynı ağlar için aynı UUID'lerin yeniden kullanılması gerekmez.

Geçerli Kullanım (Dolaylı)

xrGetSubmeshDataANDROID işlevi şu şekilde tanımlanır:

XrResult xrGetSubmeshDataANDROID(
    XrSceneMeshSnapshotANDROID                  snapshot,
    uint32_t                                    submeshDataCount,
    XrSceneSubmeshDataANDROID*                  inoutSubmeshData);

Parametre Açıklamaları

Uygulama, alt ağ gruplarını veya tüm alt ağları tek seferde almak için xrGetSubmeshDataANDROID işlevini kullanabilir. Bunun için, alınacak alt ağın ilgili kimliğine ayarlanmış her XrSceneSubmeshDataANDROID :: submeshId ile birlikte bir XrSceneSubmeshDataANDROID listesi iletilir.

XrSceneSubmeshDataANDROID :: submeshId, inoutSubmeshData içindeki her öğe için benzersiz olmalı ve aynı snapshot için xrGetAllSubmeshStatesANDROID tarafından alınabilir olmalıdır . Alt ağ kimliği geçersizse veya inoutSubmeshData içinde birden fazla öğe aynı alt ağ kimliğine sahipse çalışma zamanı XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir .

submeshDataCount, submeshStateCountOutput xrGetAllSubmeshStatesANDROID tarafından döndürülen değere eşit veya daha küçük olmalıdır. Aksi takdirde, çalışma zamanı XR_ERROR_VALIDATION_FAILURE döndürmelidir.

Bu, seçilen tüm alt ağlar için tepe noktası ve dizin sayısını sorgulamak üzere 2 çağrılı bir deyimde kullanılabilir.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

XrSceneSubmeshDataANDROID yapısı şu şekilde tanımlanır:

typedef struct XrSceneSubmeshDataANDROID {
    XrStructureType    type;
    const void*        next;
    XrUuid             submeshId;
    uint32_t           vertexCapacityInput;
    uint32_t           vertexCountOutput;
    XrVector3f*        vertexPositions;
    XrVector3f*        vertexNormals;
    uint8_t*           vertexSemantics;
    uint32_t           indexCapacityInput;
    uint32_t           indexCountOutput;
    uint32_t*          indices;
} XrSceneSubmeshDataANDROID;

Üye Açıklamaları

  • type, bu yapının XrStructureType'ıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • submeshId, alt ağı tanımlayan bir XrUuid'dir.
  • vertexCapacityInput , vertexPositions , vertexNormals ve vertexSemantics'nin kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • vertexCountOutput, vertexPositions, vertexNormals ve vertexSemantics yazılanların sayısına yönelik bir işaretçidir veya vertexCapacityInput yetersizse gerekli kapasiteye yönelik bir işaretçidir.
  • vertexPositions, çalışma zamanının alt ağın köşe konumlarını çıkış olarak vereceği bir XrVector3f dizisidir.
  • vertexNormals, çalışma zamanının alt ağın köşe normallerini çıkış olarak vereceği bir XrVector3f dizisidir. Uygulama, normal değerlerin devre dışı bırakıldığı bir izleyici oluşturduysa bu alan boş bırakılabilir.NULL
  • vertexSemantics, çalışma zamanının alt ağın köşe anlamlarını çıkış olarak vereceği uint8_t dizisidir. Uygulama, XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID semantik etiket kümesiyle bir izleyici oluşturduysa bu alan boş bırakılabilir (NULL).
  • indexCapacityInput , indices kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • indexCountOutput, yazılan indices sayısının işaretçisidir veya vertexCapacityInput yetersizse gerekli kapasitenin işaretçisidir.
  • indices, çalışma zamanının alt ağın dizinlerini çıkış olarak vereceği uint32_t dizisidir.
  • Gerekli vertexPositions, vertexNormals, vertexSemantics ve indices boyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.

Geçerli Kullanım (Dolaylı)

  • XrSceneSubmeshDataANDROID kullanılmadan önce XR_ANDROID_scene_meshing uzantısı etkinleştirilmelidir.
  • type XR_TYPE_SCENE_SUBMESH_DATA_ANDROID olmalıdır.
  • next zorunlu olarak NULL veya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.
  • vertexCapacityInput, 0 değilse vertexPositions, vertexCapacityInput XrVector3f yapılarından oluşan bir dizinin işaretçisi olmalıdır.
  • vertexCapacityInput, 0 değilse vertexNormals, vertexCapacityInput XrVector3f yapılarından oluşan bir dizinin işaretçisi olmalıdır.
  • vertexCapacityInput değeri 0 değilse vertexSemantics , vertexCapacityInput uint8_t değerlerinden oluşan bir diziye yönelik işaretçi olmalıdır.
  • indexCapacityInput değeri 0 değilse indices , indexCapacityInput uint32_t değerlerinden oluşan bir diziye yönelik işaretçi olmalıdır.

XrSceneMeshSemanticLabelANDROID numaralandırması, örgü köşelerini etiketlemek için kullanılabilecek varsayılan semantik etiketler kümesidir. Bu etiketler, örgü köşesinin hangi fiziksel ortam yüzeyinde olduğunu açıklar. Bu enum kümesi, XrSceneMeshSemanticLabelSetANDROID içindeki XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID değeriyle temsil edilir .

typedef enum XrSceneMeshSemanticLabelANDROID {
    XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID = 0,
    XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID = 1,
    XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID = 2,
    XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID = 3,
    XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID = 4,
    XR_SCENE_MESH_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelANDROID;

Numaralandırılmış değerler aşağıdaki anlamlara gelir:

Enum Açıklaması

XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID

Bu anlamsal etiket, ilgili ağ öğesinin bilinmeyen bir nesneyi temsil ettiğini gösterir.

XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID

Bu anlamsal etiket, ilgili örgü öğesinin bir zemini temsil ettiğini gösterir.

XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID

Bu anlamsal etiket, ilgili ağ öğesinin tavanı temsil ettiğini gösterir.

XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID

Bu anlamsal etiket, ilgili örgü öğesinin bir duvarı temsil ettiğini gösterir.

XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID

Bu anlamsal etiket, ilgili örgü öğesinin bir tabloyu temsil ettiğini gösterir.

Sahne ağı anlık görüntüsünü silme

xrDestroySceneMeshSnapshotANDROID işlevi şu şekilde tanımlanır:

XrResult xrDestroySceneMeshSnapshotANDROID(
    XrSceneMeshSnapshotANDROID                  snapshot);

Parametre Açıklamaları

Uygulama, sahne ağı anlık görüntüsünü silmek için xrDestroySceneMeshSnapshotANDROID işlevini kullanabilir. İşleyici yok edildiğinde uygulama, alt ağ bilgisi veya verilerini almak için artık işleyiciyi kullanamaz. İzleyici tutma yeri, sahne ağı anlık görüntüsü tutma yerinin üst öğesi olduğundan izleyici yok edildiğinde tutma yeri otomatik olarak yok edilir.

Geçerli Kullanım (Dolaylı)

İş parçacığı güvenliği

  • snapshot ve tüm alt tutma yerlerine erişim, harici olarak senkronize edilmelidir.

Dönüş Kodları

Başarılı

  • XR_SUCCESS

Hata

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Sahne ağı oluşturma için örnek kod

Aşağıdaki örnek kodda, oluşturma için sahne ağı verilerine nasıl erişileceği gösterilmektedir.

XrInstance instance;  // Created at app startup
XrSystemId systemId;  // Received from xrGetSystem() at app startup
XrSession session;    // Created at app startup
XrSpace appPlaySpace; // Created at app startup

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateSceneMeshingTrackerANDROID xrCreateSceneMeshingTrackerANDROID;
PFN_xrDestroySceneMeshingTrackerANDROID xrDestroySceneMeshingTrackerANDROID;
PFN_xrEnumerateSupportedSemanticLabelSetsANDROID xrEnumerateSupportedSemanticLabelSetsANDROID;
PFN_xrCreateSceneMeshSnapshotANDROID xrCreateSceneMeshSnapshotANDROID;
PFN_xrDestroySceneMeshSnapshotANDROID xrDestroySceneMeshSnapshotANDROID;
PFN_xrGetAllSubmeshStatesANDROID xrGetAllSubmeshStatesANDROID;
PFN_xrGetSubmeshDataANDROID xrGetSubmeshDataANDROID;

// Inspect system capability
XrSystemSceneMeshingPropertiesANDROID sceneMeshingProps = {
  .type = XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
  .type = XR_TYPE_SYSTEM_PROPERTIES,
  .next = &sceneMeshingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!sceneMeshingProps.supportsSceneMeshing) {
    // scene meshing is not supported.
    return;
}

uint32_t supportedsemanticLabelSetsCount = 0;
xrEnumerateSupportedSemanticLabelSetsANDROID(
  instance, systemId, 0, &supportedsemanticLabelSetsCount, nullptr);
std::vector<XrSceneMeshSemanticLabelSetANDROID> supportedSemanticLabelSets(
  supportedsemanticLabelSetsCount);
xrEnumerateSupportedSemanticLabelSetsANDROID(
  instance, systemId, supportedsemanticLabelSetsCount,
  &supportedsemanticLabelSetsCount, supportedSemanticLabelSets.data());

XrSceneMeshSemanticLabelSetANDROID semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID;
// Check if system supports XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
if (std::find(supportedSemanticLabelSets.begin(), supportedSemanticLabelSets.end(),
              XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID) !=
    supportedSemanticLabelSets.end()) {
  semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID;
}

XrSceneMeshingTrackerCreateInfoANDROID trackerCreateInfo = {
  .type = XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID,
  .semanticLabelSet = semanticLabelSet,
  .enableNormals = XR_TRUE
};

XrSceneMeshingTrackerANDROID tracker = XR_NULL_HANDLE;
CHK_XR(xrCreateSceneMeshingTrackerANDROID(session, &trackerCreateInfo, &tracker));

XrSceneMeshSnapshotCreationResultANDROID snapshotResult {
  .type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID,
  .snapshot = XR_NULL_HANDLE
};
XrSceneMeshSnapshotANDROID& snapshot = snapshotResult.snapshot;
XrSceneMeshSnapshotCreateInfoANDROID createInfo {
  .type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
};

// app update loop
while (true) {
  // ...
  // For every frame in frame loop
  // ...

  XrFrameState frameState; // previously returned from xrWaitFrame
  const XrTime time = frameState.predictedDisplayTime;
  XrBoxf box; // populated with the bounding box of the camera frustum

  // ...

  createInfo.baseSpace = appPlaySpace;
  createInfo.time = time;
  createInfo.boundingBox = box;

  // Grab the scene mesh snapshot. This way the app can: know all of the submesh infos,
  // choose the appropriate submeshes for which to get data, allocate the necessary
  // buffer for those submeshes, and then get the data.
  CHK_XR(xrCreateSceneMeshSnapshotANDROID(tracker, &createInfo, &snapshotResult));

  // check the tracking state
  if (snapshotResult.trackingState == XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID) {
    // unrecoverable error. Exit the app.
    if (snapshot != XR_NULL_HANDLE) {
      CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
      snapshot = XR_NULL_HANDLE;
    }
    break;
  } else if (snapshotResult.trackingState != XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID) {
    // The tracker is not tracking. Try again later.
    if (snapshot != XR_NULL_HANDLE) {
      CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
      snapshot = XR_NULL_HANDLE;
    }
    continue;
  }

  // 2-call idiom for getting submesh states
  uint32_t submeshCount = 0;
  CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
  std::vector<XrSceneSubmeshStateANDROID> states(submeshCount, {
    .type = XR_TYPE_SCENE_SUBMESH_STATE_ANDROID,
  });
  CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, submeshCount, &submeshCount, states.data()));

  // To store the poses for the selected submeshes
  std::vector<XrPosef> submeshesPoses;
  submeshesPoses.reserve(submeshCount);

  std::vector<XrSceneSubmeshDataANDROID> submeshes;
  submeshes.reserve(submeshCount);
  // Iterate the states and determine which submeshes the app wants data for
  for (XrSceneSubmeshStateANDROID& state : states) {
    // Modify this bool as necessary by looking at states. Maybe state.lastUpdatedTime
    // is below a threshold or maybe the bounding box does not intersect with camera view
    // frustum (The submesh will be culled).
    bool needed;
    if (needed) {
      // Add the selected submesh to the submeshes list. Set the capacity
      // zero for now since the size of the buffer will be determined later.
      XrSceneSubmeshDataANDROID submesh {
        .type = XR_TYPE_SCENE_SUBMESH_DATA_ANDROID,
        .submeshId = state.submeshId,
        .vertexCapacityInput = 0,
        .vertexCountOutput = 0,
        .vertexPositions = nullptr,
        .vertexNormals = nullptr,
        .vertexSemantics = nullptr,
        .indexCapacityInput = 0,
        .indexCountOutput = 0,
        .indices = nullptr,
      };
      submeshes.push_back(submesh);
      submeshesPoses.push_back(state.submeshPoseInBaseSpace);
    }
  }

  // Grab the data for the selected submeshes using the 2-call idiom.
  CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
  for (XrSceneSubmeshDataANDROID& submesh : submeshes) {
    submesh.vertexCapacityInput = submesh.vertexCountOutput;
    submesh.vertexCountOutput = 0;
    submesh.vertexPositions = new XrVector3f[submesh.vertexCapacityInput];
    submesh.vertexNormals = new XrVector3f[submesh.vertexCapacityInput];
    submesh.vertexSemantics = new uint8_t[submesh.vertexCapacityInput];
    submesh.indexCapacityInput = submesh.indexCountOutput;
    submesh.indexCountOutput = 0;
    submesh.indices = new uint32_t[submesh.indexCapacityInput];
  }
  CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));

  // Destroy the scene mesh snapshot since we have finally grabbed the submeshes data. In
  // next iteration app can: create a new one to get latest mesh data
  CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
  snapshot = XR_NULL_HANDLE;

  // Iterate the submeshes and get the vertex positions, vertex normals and
  // vertex semantics data for the selected submeshes
  for (uint32_t i = 0; i < submeshes.size(); i++) {
    XrSceneSubmeshDataANDROID& data = submeshes[i];
    XrVector3f* vertexPositions = data.vertexPositions;
    XrVector3f* vertexNormals = data.vertexNormals;
    XrSceneMeshSemanticLabelANDROID* vertexSemantics =
      new XrSceneMeshSemanticLabelANDROID[data.vertexCountOutput];
    for (uint32_t j = 0; j < data.vertexCountOutput; j++) {
      vertexSemantics[j] =
        static_cast<XrSceneMeshSemanticLabelANDROID>(data.vertexSemantics[j]);
    }
    XrPosef pose = submeshesPoses[i];

    // *** Use the data as per needs ***

    // Release the allocated memory for the data buffers when done using
    delete [] vertexSemantics;
    delete [] data.vertexPositions;
    delete [] data.vertexNormals;
    delete [] data.vertexSemantics;
    delete [] data.indices;
  }

  // ...
  // Finish frame loop
  // ...
}

CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));

Yeni Nesne Türleri

Yeni Komutlar

Yeni Yapılar

Yeni Sıralamalar

Yeni Enum Sabitleri

  • XR_ANDROID_SCENE_MESHING_EXTENSION_NAME
  • XR_ANDROID_scene_meshing_SPEC_VERSION
  • XrObjectType'i genişletme :

    • XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID
    • XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
  • XrStructureType uzatma :

    • XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID
    • XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
    • XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID
    • XR_TYPE_SCENE_SUBMESH_DATA_ANDROID
    • XR_TYPE_SCENE_SUBMESH_STATE_ANDROID
    • XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID

Sayılar

Sürüm Geçmişi

  • Revizyon 3, 15.05.2025 (Salar Khan)

    • İlk uzantı açıklaması