XR_ANDROID_scene_meshing

Name String

XR_ANDROID_scene_meshing

Uzantı Türü

Örnek uzantısı

Kayıtlı Dahili Numara

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 bir fikri mülkiyet 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 mesh'ler sağlamak için tasarlanmıştır.

Uygulamalar, sahneyi görselleştirmek ve sanal nesnelerin fiziksel nesnelerle etkileşime girmesini (ör. çarpışma) sağlamak için bu uzantıyı kullanabilir.

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

Sahne meshleme verileri, hassas kişisel bilgilerdir ve kişisel gizlilik ve bütünlükle yakından bağlantılıdır. Sahne ağ oluşturma verilerini depolayan veya aktaran uygulamaların, bu işlemi yapmak için her zaman kullanıcıdan etkin ve özel bir onay istemesi önemle tavsiye edilir.

İzinler

Android uygulamalarının manifest dosyasında android.permission.SCENE_UNDERSTANDING_FINE izni bulunmalıdır. 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, aşağıdaki işlevleri kullanmak için çalışma zamanında izin istemelidir:

(koruma düzeyi: tehlikeli)

Sistem özelliğini 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • supportsSceneMeshing, sistemin sahne ağ oluşturmayı destekleyip desteklemediğini gösteren bir XrBool32 değeridir.

Uygulamalar, xrGetSystemProperties işlevini çağırırken XrSystemProperties'a bir XrSystemSceneMeshingPropertiesANDROID yapısı ekleyerek sistemin sahne mesh'leme yapıp yapamayacağını kontrol edebilir.

Bir çalışma zamanı supportsSceneMeshing için XR_FALSE döndürürse sistem, sahne ağ oluşturmayı desteklemez ve bu nedenle xrCreateSceneMeshingTrackerANDROID'den XR_ERROR_FEATURE_UNSUPPORTED döndürmesi gerekir. supportsSceneMeshing, XR_FALSE olduğunda uygulama, sahne mesh'leme işlevini kullanmaktan kaçınmalıdır.

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

Geçerli Kullanım (Dolaylı)

XrSceneMeshSemanticLabelSetANDROID sıralaması, sahne mesh'leme için anlamsal etiket gruplarını 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 grubunu 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_DEFAULT2_ANDROID = 1000801000,
    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 grubu, XrSceneMeshSemanticLabelANDROID'i temsil eder.

XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT2_ANDROID

Bu anlamsal etiket grubu, XrSceneMeshSemanticLabel2ANDROID'i temsil eder. (XR_ANDROID_scene_meshing_semantic_label2 uzantısı tarafından eklendi)

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, xrGetSystem'den yeniden denenen bir XrSystemId.
  • supportedSemanticLabelSetsInputCapacity, supportedSemanticLabelSets kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • supportedSemanticLabelSetsOutputCount, yazılan supportedSemanticLabelSets sayısına yönelik bir işaretçi veya supportedSemanticLabelSetsInputCapacity değerinin yetersiz olması durumunda gerekli kapasiteye yönelik bir işaretçidir.
  • supportedSemanticLabelSets, XrSceneMeshSemanticLabelSetANDROID dizisine işaret eden bir işaretçidir. supportedSemanticLabelSetsInputCapacity 0 ise NULL olabilir.
  • Gerekli supportedSemanticLabelSets boyutunu alma hakkında 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 semantik etiket kümelerini listeleyebilir.

Her sistem en azından XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID değerini desteklemelidir. Bu enum değeri, semantik etiket kümesi olmadığını gösterir ve uygulamanın köşe semantiğine ihtiyaç duymadığı durumlarda kullanılabilir.

Geçerli Kullanım (Dolaylı)

  • XR_ANDROID_scene_meshing uzantısı, xrEnumerateSupportedSemanticLabelSetsANDROID çağrılmadan önce etkinleştirilmelidir.
  • instance geçerli bir XrInstance herkese açık kullanıcı adı olmalıdır
  • supportedSemanticLabelSetsOutputCount, bir uint32_t değerine işaretçi olmalıdır
  • supportedSemanticLabelSetsInputCapacity, 0 değilse supportedSemanticLabelSets, supportedSemanticLabelSetsInputCapacity XrSceneMeshSemanticLabelSetANDROID değerlerinden oluşan bir diziye 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 ağ oluşturma izleyici tutma yeri oluşturma

XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)

XrSceneMeshingTrackerANDROID tanıtıcısı, sahne ağ oluşturma ve ilgili kaynakları yönetme için bir sahne ağ oluşturma izleyicisini temsil eder.

Bu herkese açık kullanıcı adı, bu uzantıda xrCreateSceneMeshSnapshotANDROID kullanarak 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ı

Uygulamalar, xrCreateSceneMeshingTrackerANDROID işlevini kullanarak XrSceneMeshingTrackerANDROID herkese açık anahtarı oluşturabilir.

Sistem, sahne ağını desteklemiyorsa çalışma zamanı, xrCreateSceneMeshingTrackerANDROID'den XR_ERROR_FEATURE_UNSUPPORTED değerini döndürmelidir. Bu durumda, uygulamanın sahne meshleme 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 mesh izleyici oluştururken yalnızca XrSceneMeshingTrackerCreateInfoANDROID :: semanticLabelSet içinde sistem tarafından desteklenen semantik etiket kümelerini kullanmalıdır. Uygulama, desteklenmeyen bir sahne ağı köşe semantik etiket grubu kullanıyorsa çalışma zamanı, xrCreateSceneMeshingTrackerANDROID'den XR_ERROR_FEATURE_UNSUPPORTED değerini döndürmelidir .

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

xrCreateSceneMeshingTrackerANDROID herkese açık kullanıcı adı, sahne mesh'leme için tüm kaynaklara sahiptir. Sahne meshleme deneyimi tamamlandıktan sonra uygulama, xrDestroySceneMeshingTrackerANDROID işlevi aracılığıyla herkese açık anahtarı imha etmelidir.

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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da 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 için 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 belirten bir XrBool32 değeridir.

XrSceneMeshingTrackerCreateInfoANDROID yapısı, XrSceneMeshingTrackerANDROID herkese açık kullanıcı adı oluşturma bilgilerini 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 meshleme deneyimleri tamamlandığında tracker ve temel kaynakları serbest bırakır.

Geçerli Kullanım (Dolaylı)

İleti Dizisi Güvenliği

  • tracker ve tüm alt herkese açık kullanıcı adlarına 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 noktası oluşturma

XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)

XrSceneMeshSnapshotANDROID herkese açık kullanıcı adı, bir 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 mesh verilerinin anlık görüntüsünü alan xrCreateSceneMeshSnapshotANDROID kullanılarak oluşturulur.

Bu herkese açık kullanıcı adı, xrGetAllSubmeshStatesANDROID ve xrGetSubmeshDataANDROID kullanılarak alt ağ bilgilerini 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 mesh izleyiciden sahne mesh anlık görüntüsü oluşturmak için xrCreateSceneMeshSnapshotANDROID işlevini kullanabilir. Bu işlev, XrSceneMeshSnapshotCreationResultANDROID yapısına sarmalanmış XrSceneMeshTrackingStateANDROID ile birlikte bir XrSceneMeshSnapshotANDROID herkese açık kullanıcı adı döndürür. Herkese açık kullanıcı adı, teknik olarak oluşturma sırasındaki sahne ağı verilerinin anlık görüntüsüdür. Bu herkese açık kullanıcı adı, 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • baseSpace, sahne alt ağı poz bilgisinin temsil edildiği bir XrSpace'tir.
  • time, sahne ağının işleneceği veya görüntüleneceği zamanı açıklayan XrTime değeridir (genellikle XrFrameState :: predictedDisplayTime).
  • boundingBox, sahne ağının alınacağı sınırlayıcı kutuyu açıklayan bir XrBoxf değeridir.

XrSceneMeshSnapshotCreateInfoANDROID yapısı, XrSceneMeshSnapshotANDROID herkese açık kullanıcı adı 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.
  • snapshot, çalışma zamanı tarafından oluşturulan bir XrSceneMeshSnapshotANDROID herkese açık anahtarıdır.
  • trackingState, anlık görüntü oluşturma sırasında sahne mesh izleyicisinin durumunu açıklayan bir XrSceneMeshTrackingStateANDROID'dir.

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

Geçerli Kullanım (Dolaylı)

XrSceneMeshTrackingStateANDROID numaralandırması, sahne mesh izleyicinin izleme durumunu açıklar. Bu enum'daki her değer, sahne mesh 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

Takip cihazı henüz ağ verileri sağlamaya hazır değil.

XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID

Aktivite izleyici aktif olarak aktivite izleme yapıyor.

XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID

Takipçi, son ağ güncellemesinden bu yana entegre edilecek geçerli ölçümleri bekliyor.

XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID

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

Bu durum, uygulamaya yalnızca ek bilgi sağlar. Başka hata kaynakları yoksa çalışma zamanı, izleyicinin mevcut XrSceneMeshTrackingStateANDROID değerinden bağımsız olarak uygulamanın anlık görüntü 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ğı verileri alınıyor

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 herkese açık anahtarıdır.
  • submeshStateCapacityInput, submeshStates kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • submeshStateCountOutput, yazılan submeshStates sayısına yönelik bir işaretçi veya submeshStateCapacityInput değerinin yetersiz olması durumunda gerekli kapasiteye yönelik bir işaretçidir.
  • submeshStates, çalışma zamanının sahne ağındaki tüm alt ağların durumunu çıkaracağı XrSceneSubmeshStateANDROID yapılarından oluşan bir diziye işaret eder. submeshStateCapacityInput 0 ise NULL olabilir.
  • Gerekli submeshStates boyutunu alma hakkında 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ı)

  • XR_ANDROID_scene_meshing uzantısı, xrGetAllSubmeshStatesANDROID çağrılmadan önce etkinleştirilmelidir
  • snapshot, geçerli bir XrSceneMeshSnapshotANDROID herkese açık kullanıcı adı olmalıdır.
  • submeshStateCountOutput, bir uint32_t değerine 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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da 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ı temsil eden bir XrTime değeridir.
  • submeshPoseInBaseSpace, sahne ağı anlık görüntüsünü 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ırlar, sahne mesh tutma noktası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ı, herhangi bir zamanda bu eşlemeyi kaybedebilir ve algılanan alt ağların herhangi bir alt kümesine yeni bir UUID atayabilir. Özellikle çalışma zamanlarının, sonraki uygulama örneklerinde aynı mesh'ler için aynı UUID'leri yeniden kullanması 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 her XrSceneSubmeshDataANDROID :: submeshId, alınacak alt ağın ilgili kimliğine ayarlanmış bir XrSceneSubmeshDataANDROID listesi iletilir.

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

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

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

Geçerli Kullanım (Dolaylı)

  • XR_ANDROID_scene_meshing uzantısı, xrGetSubmeshDataANDROID çağrılmadan önce etkinleştirilmelidir.
  • snapshot, geçerli bir XrSceneMeshSnapshotANDROID herkese açık kullanıcı adı olmalıdır.
  • inoutSubmeshData, submeshDataCount XrSceneSubmeshDataANDROID yapılarından oluşan bir diziye işaretçi olmalıdır.
  • submeshDataCount parametresi 0 değerinden büyük 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

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 değeridir.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da 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 kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • vertexCountOutput, yazılan vertexPositions, vertexNormals ve vertexSemantics sayısına yönelik bir işaretçi veya vertexCapacityInput'nin yetersiz olması durumunda gerekli kapasiteye yönelik bir işaretçidir.
  • vertexPositions, çalışma zamanının alt ağın köşe konumlarını çıkaracağı bir XrVector3f dizisidir.
  • vertexNormals, çalışma zamanının alt ağın köşe normallerini çıkaracağı bir XrVector3f dizisidir. Uygulama, normaller devre dışı bırakılmış bir izleyici oluşturduysa bu alan NULL bırakılabilir.
  • vertexSemantics, çalışma zamanının alt ağın köşe semantiğini çıkaracağı bir uint8_t dizisidir. Uygulama, XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID semantik etiket kümesiyle bir izleyici oluşturduysa bu alan NULL bırakılabilir.
  • indexCapacityInput, indices kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • indexCountOutput, yazılan indices sayısına yönelik bir işaretçi veya vertexCapacityInput değerinin yetersiz olması durumunda gerekli kapasiteye yönelik bir işaretçidir.
  • indices, çalışma zamanının alt ağın dizinlerini çıkaracağı bir uint32_t dizisidir.
  • Gerekli vertexPositions, vertexNormals, vertexSemantics ve indices boyutunu alma hakkında 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, NULL veya yapı zincirindeki bir sonraki yapıya 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, 0 değilse vertexSemantics, vertexCapacityInput uint8_t değerlerinden oluşan bir dizinin işaretçisi olmalıdır.
  • indexCapacityInput, 0 değilse indices, indexCapacityInput uint32_t değerlerinden oluşan bir dizinin işaretçisi olmalıdır.

XrSceneMeshSemanticLabelANDROID numaralandırması, mesh köşesinin hangi fiziksel ortam yüzeyinde olduğunu açıklamak için mesh köşelerini etiketlemek amacıyla kullanılabilecek varsayılan semantik etiket grubudur. Bu enum grubu, 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ırmalar aşağıdaki anlamlara sahiptir:

Enum Açıklaması

XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID

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

XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID

Bu semantik etiket, ilgili ağ öğesinin bir zemini temsil ettiğini gösterir.

XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID

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

XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID

Bu semantik etiket, ilgili ağ öğesinin bir duvarı temsil ettiğini gösterir.

XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID

Bu semantik etiket, ilgili mesh öğ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 mesh anlık görüntüsünü yok etmek için xrDestroySceneMeshSnapshotANDROID işlevini kullanabilir. Herkese açık kullanıcı adı silindikten sonra uygulama, alt ağ bilgilerini veya verilerini almak için artık bu adı kullanamaz. İzleyici tanıtıcısı, sahne ağı anlık görüntüsü tanıtıcısının üst öğesi olduğundan izleyici yok edildiğinde tanıtıcı otomatik olarak yok edilir.

Geçerli Kullanım (Dolaylı)

İleti Dizisi Güvenliği

  • snapshot ve tüm alt herkese açık kullanıcı adlarına 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 mesh'i 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 Enum Veri Türleri

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'ı genişletme:

    • 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

  • Düzeltme 3, 15.05.2025 (Salar Khan)

    • İlk uzantı açıklaması