Name String
XR_ANDROID_scene_meshing
Uzantı Türü Örnek uzantısı
Kayıtlı Uzantı Numarası 464
Düzeltme 3
Uzantı ve Sürüm Bağımlılıkları OpenXR 1.0
Son Değiştirilme Tarihi 2025-05-15
IP Durumu Bilinen herhangi bir 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ı, ortamınızdaki fiziksel nesneleri yaklaşık olarak temsil eden ağlar için ağ verileri sağlamayı amaçlar. Sahnenizi sürükleyici bir uygulamada görselleştirmek ve sanal nesnelerin çarpışma gibi fiziksel nesnelerle etkileşime girmesine izin vermek için kullanılabilir.
Sahne ağı verileri hassas kişisel bilgiler olabilir ve kişisel gizlilik ile bütünlükle yakından bağlantılıdır. Sahne ağı verilerini depolayan veya aktaran uygulamaların, bu işlemi yapabilmek için her zaman kullanıcıdan aktif ve spesifik bir kabul istemesi önemle tavsiye edilir.
İzinler
Android uygulamalarının manifestlerinde android.permission.SCENE_UNDERSTANDING_FINE
iznilistelenmelidir.
android.permission.SCENE_UNDERSTANDING_FINE
izni, çalışma zamanının kullanıcı ortamını incelemesine olanak tanıdığı için hassas bir izin olarak kabul edilir.
Uygulama, bu işlevleri kullanmak için çalışma zamanında izin istemelidir:
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
(Koruma düzeyi: tehlikeli)
Sistem kapasitesini inceleme
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.
XrSystemSceneMeshingPropertiesANDROID
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ştirme özelliğini destekleyip desteklemediğini belirten bir XrBool32 değeridir.
supportsSceneMeshing
, XR_FALSE
ise sistem, sahne birleştirmeyi desteklemez.
Uygulama, supportsSceneMeshing
değeri XR_FALSE
olduğunda sahne ağı oluşturma işlevini kullanmaktan kaçınmalıdır. Aksi takdirde xrCreateSceneMeshingTrackerANDROID çağrıları başarısız olur.
supportsSceneMeshing
XR_TRUE
ise sistem, sahne birleştirmeyi destekler.
Geçerli Kullanım (Örtülü)
XR_ANDROID_scene_meshing
uzantısı, XrSystemSceneMeshingPropertiesANDROID kullanılmadan önce etkinleştirilmelidir.type
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
olmalıdırnext
,NULL
veya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.
XrSceneMeshSemanticLabelSetANDROID
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;
xrEnumerateSupportedSemanticLabelSetsANDROID
Uygulama, xrEnumerateSupportedSemanticLabelSetsANDROID işlevini kullanarak sistem tarafından desteklenen semantik etiket kümelerini alabilir.
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 işlevinden yeniden denenmiş bir XrSystemId'dir.supportedSemanticLabelSetsInputCapacity
,supportedSemanticLabelSets
uzunluğundadır.supportedSemanticLabelSetsOutputCount
, dizinin başından itibaren çalışma zamanı tarafından değiştirilensupportedSemanticLabelSets
içindeki öğelerin sayısıdır.supportedSemanticLabelSets
, desteklenen semantik etiket kümelerinin çalışma zamanı tarafından yazıldığı bir XrSceneMeshSemanticLabelSetANDROID dizisidir.
Her sistemin en azından XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
değerini desteklemesi beklenir. Çünkü bu enum değeri, anlamsal etiket kümesi olmadığını gösterir ve uygulamanın köşe semantiğine ihtiyacı olmadığı durumlarda kullanılabilir.
Sahne ağı izleyici kolu oluşturma
XrSceneMeshingTrackerANDROID
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
Bir uygulama, xrCreateSceneMeshingTrackerANDROID işlevini kullanarak XrSceneMeshingTrackerANDROID tutacağı oluşturabilir.
XrResult xrCreateSceneMeshingTrackerANDROID(
XrSession session,
const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
XrSceneMeshingTrackerANDROID* tracker);
Parametre Açıklamaları
session
, sahne ağı izleyicisinin etkin olacağı bir XrSession'dır.createInfo
, oluşturulacak sahne örgü izleyiciyi tanımlamak için kullanılan bir XrSceneMeshingTrackerCreateInfoANDROID yapısının işaretçisidir.tracker
, döndürülen XrSceneMeshingTrackerANDROID tutma yeridir.
Sistem, sahne ağı oluşturmayı desteklemiyorsa xrCreateSceneMeshingTrackerANDROID, XR_ERROR_FEATURE_UNSUPPORTED
değerini döndürür.
Uygulama, xrGetSystemProperties işlevini XrSystemSceneMeshingPropertiesANDROID yapısıyla çağırarak sistem desteğini kontrol edebilir.
Sahne örgü izleyici oluştururken XrSceneMeshingTrackerCreateInfoANDROID::semanticLabelSet içinde yalnızca sistem tarafından desteklenen semantik etiket kümeleri kullanılabilir. Desteklenen anlamsal etiket kümelerinin listesini almak için xrEnumerateSupportedSemanticLabelSetsANDROID işlevi kullanılabilir.
Uygulama desteklenmeyen bir semanticLabelSet
isterse xrCreateSceneMeshingTrackerANDROID, XR_ERROR_FEATURE_UNSUPPORTED
değerini döndürür.
xrCreateSceneMeshingTrackerANDROID işleyeni, sahne ağ oluşturma için tüm kaynaklara sahiptir. Sahne ağı oluşturma deneyimi tamamlandığında uygulama, xrDestroySceneMeshingTrackerANDROID işlevi aracılığıyla tutma yerini yok etmelidir.
XrSceneMeshingTrackerCreateInfoANDROID
XrSceneMeshingTrackerCreateInfoANDROID yapısı, XrSceneMeshingTrackerANDROID tutacını oluşturmak için gereken bilgileri açıklar.
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ğerXR_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 değeridir.
xrDestroySceneMeshingTrackerANDROID
xrDestroySceneMeshingTrackerANDROID işlevi, sahne ağı oluşturma deneyimleri tamamlandığında tracker
ve temel kaynakları serbest bırakır.
XrResult xrDestroySceneMeshingTrackerANDROID(
XrSceneMeshingTrackerANDROID tracker);
Parametre Açıklamaları
tracker
, daha önce xrCreateSceneMeshingTrackerANDROID tarafından oluşturulmuş bir XrSceneMeshingTrackerANDROID olmalıdır.
Sahne ağı anlık görüntüsü herkese açık kullanıcı adı oluşturma
XrSceneMeshSnapshotANDROID
XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)
XrSceneMeshSnapshotANDROID işleyici, sahne ağı anlık görüntüsünü temsil eder. Bu, xrCreateSceneMeshSnapshotANDROID kullanılarak oluşturulur. Bu işlev, işlev çağrısı sırasında sahne ağı verilerinin anlık görüntüsünü alır.
Bu işleyici, xrGetAllSubmeshStatesANDROID ve xrGetSubmeshDataANDROID kullanılarak alt ağ bilgileri ve verilerini almak için kullanılabilir.
XrSceneMeshSnapshotCreateInfoANDROID
XrSceneMeshSnapshotCreateInfoANDROID yapısı, XrSceneMeshSnapshotANDROID tutacını oluşturmak için gereken bilgileri açıklar.
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ğlarının poz bilgilerinin gösterilmesi gereken referans alanını tanımlamak için kullanılan bir XrSpace'tir.time
, sahne ağı işlenirken veya görüntülenirken geçen süreyi açıklayan XrTime'dır.boundingBox
, sahne ağının elde edileceği sınırlayıcı kutuyu açıklayan bir XrBoxf'dir.
XrSceneMeshTrackingStateANDROID
XrSceneMeshTrackingStateANDROID numaralandırması, sahne ağı izleyicisinin izleme durumunu açıklar. Bu numaralandırmadaki her değer, sahne ağı izleyicinin bir durumunu temsil eder. xrCreateSceneMeshSnapshotANDROID işlevinden döndürülen XrSceneMeshSnapshotCreationResultANDROID yapısı içinde sarmalanmış bu enum.
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;
XrSceneMeshSnapshotCreationResultANDROID
XrSceneMeshSnapshotCreationResultANDROID yapısı, xrCreateSceneMeshSnapshotANDROID'den döndürülen bir sahne ağı anlık görüntüsü oluşturma işleminin sonucunu saklar. Sonuç, anlık görüntü oluşturulduğu sırada anlık görüntü tutamacını ve sahne ağı izleyicinin izleme durumunu içerir.
typedef struct XrSceneMeshSnapshotCreationResultANDROID {
XrStructureType type;
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 tutma yeridir.trackingState
, anlık görüntü oluşturma sırasında sahne ağı izleyicinin durumunu açıklayan bir XrSceneMeshTrackingStateANDROID'dir.
xrCreateSceneMeshSnapshotANDROID
Uygulama, sahne ağı izleyicisinden sahne ağı anlık görüntüsü oluşturmak için xrCreateSceneMeshSnapshotANDROID işlevini kullanabilir. Bu işlev, XrSceneMeshSnapshotANDROID işleyicisini ve XrSceneMeshTrackingStateANDROID işleyicisini XrSceneMeshSnapshotCreationResultANDROID yapısı içinde sarmalanmış olarak 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.
XrResult xrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult);
Parametre Açıklamaları
tracker
, daha önce xrCreateSceneMeshingTrackerANDROID ile oluşturulmuş bir XrSceneMeshingTrackerANDROID tutamacıdır.createInfo
, sahne ağı anlık görüntüsünü oluşturmak için gereken bilgileri içeren bir XrSceneMeshSnapshotCreateInfoANDROID yapısının işaretçisidir.outSnapshotCreationResult
, anlık görüntü oluşturma sonucuyla çalışma zamanı tarafından doldurulan bir XrSceneMeshSnapshotCreationResultANDROID nesnesine yönelik bir işaretçidir.
Sahne ağı anlık görüntüsünden sahne ağı verilerini edinme
XrSceneSubmeshStateANDROID
XrSceneSubmeshStateANDROID, bir alt ağı tanımlar. Alt ağ hakkında temel bilgileri (kimlik, poz, sınırlar, son güncelleme zamanı) içerir.
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ı temsil eden bir XrTime'dır.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. Bu, alt ağ sınırlayıcı kutusunun merkezinin duruşudur.bounds
, alt ağı çevreleyen sınırlayıcı kutunun boyutlarını açıklayan bir XrExtent3Df'dir. Bu sınırlar, sahne ağı tutacını oluşturmak için kullanılan temel alandadır.
xrGetAllSubmeshStatesANDROID
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. Bu işlev, 2 çağrılı bir deyimde kullanılabilir.
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
uzunluğundadır.submeshStateCountOutput
, dizinin başından itibaren çalışma zamanı tarafından değiştirilensubmeshStates
içindeki öğelerin sayısıdır.submeshStates
, çalışma zamanının sahne ağındaki tüm alt ağların durumunu çıkış olarak vereceği XrSceneSubmeshStateANDROID yapıları dizisidir.
XrSceneSubmeshDataANDROID
XrSceneSubmeshDataANDROID, bir alt ağın üçgen verilerini ve alt ağ kimliğini içerir. Bu yapı, alt ağ verilerini almak için xrGetSubmeshDataANDROID içinde kullanılır. Uygulama, bu yapının alt ağ kimliğini ve arabellek işaretçilerini, ayrılan arabelleklerde alt ağ için döndürülen veriler doldurulabilecek şekilde ayarlamalıdır. Uygulama, xrGetSubmeshDataANDROID'i 2 çağrılı bir deyim olarak kullanabilir. İlk çağrı, uygulamanın alt ağ kimliğini ayarlamasını ve alt ağ verileri için gereken arabelleklerin boyutlarını almasını gerektirir. Ardından uygulama, arabellekleri ayırabilir ve ikinci çağrıda verileri alabilir.
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
vevertexSemantics
uzunluğundadır.vertexCountOutput
,vertexPositions
,vertexNormals
vevertexSemantics
dizilerinde, dizinin başından itibaren çalışma zamanı tarafından değiştirilen öğelerin sayısıdır.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ğerleri devre dışı bırakılmış 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ğiuint8_t
dizisidir. Uygulama,XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
semantik etiketi ayarlanmış bir izleyici oluşturduysa bu alan boş bırakılabilir (NULL
).indexCapacityInput
,indices
uzunluğundadır.indexCountOutput
,indices
dizisinde, dizinin başından itibaren çalışma zamanı tarafından değiştirilen öğelerin sayısıdır.indices
, çalışma zamanının alt ağın dizinlerini çıkış olarak vereceği biruint32_t
dizisidir.
xrGetSubmeshDataANDROID
Uygulama, seçili bir alt ağ listesinin verilerini almak için xrGetSubmeshDataANDROID işlevini kullanabilir. Bu işlev, 2 çağrılı bir deyimde kullanılabilir. İlk çağrıda, uygulama alt ağ verileri için gereken arabelleklerin boyutlarını almak üzere seçilen alt ağ listesindeki her öğe için geçerli bir alt ağ kimliği (ör.aynı sahne ağı anlık görüntüsüyle xrGetAllSubmeshStatesANDROID'den alınabilir) ve sıfır kapasite ayarlamalıdır. İkinci çağrıda, uygulama, alt ağların verilerini almak için arabelleklerin kapasitesiyle birlikte, seçilen alt ağ listesindeki her öğe için arabellek işaretçilerini ayrılmış bir arabelleğe ayarlamalıdır.
XrResult xrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData);
Parametre Açıklamaları
snapshot
, daha önce xrCreateSceneMeshSnapshotANDROID ile oluşturulmuş bir XrSceneMeshSnapshotANDROID tutamacıdır.submeshDataCount
,inoutSubmeshData
uzunluğundadır.inoutSubmeshData
, her öğenin alt ağ kimliğine göre çalışma zamanı tarafından ağ verileriyle doldurulacağı XrSceneSubmeshDataANDROID dizisidir.
XrSceneMeshSemanticLabelANDROID
XrSceneMeshSemanticLabelANDROID numaralandırması, örgü köşelerini hangi fiziksel ortam yüzeyinde olduklarını açıklayacak şekilde etiketlemek için kullanılabilecek varsayılan semantik etiket kümesidir.
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;
Sahne ağı anlık görüntüsünü silme
xrDestroySceneMeshSnapshotANDROID
Uygulama, sahne ağı anlık görüntüsünü silmek için xrDestroySceneMeshSnapshotANDROID işlevini kullanabilir. İşleyici yok edildikten sonra uygulama, alt ağ bilgisi veya verilerini almak için artık işleyiciyi kullanamaz. İzleyici tutacağı, sahne ağı anlık görüntüsü tutacağının üst öğesi olduğundan izleyici yok edildiğinde tutacak otomatik olarak yok edilir.
XrResult xrDestroySceneMeshSnapshotANDROID(
XrSceneMeshSnapshotANDROID snapshot);
Parametre Açıklamaları
snapshot
, daha önce xrCreateSceneMeshSnapshotANDROID ile oluşturulmuş bir XrSceneMeshSnapshotANDROID tutma yeridir ve bu işlev tarafından yok edilir.
Sahne ağı oluşturma için örnek kod
Aşağıdaki örnek kod, oluşturma için sahne ağı verilerine nasıl erişileceğini gösterir.
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
std::vector<XrSceneSubmeshStateANDROID> states;
uint32_t submeshCount = 0;
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
states.resize(submeshCount);
for (XrSceneSubmeshStateANDROID& state : states) {
state = {.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.vertexCountOutput];
submesh.vertexNormals = new XrVector3f[submesh.vertexCountOutput];
submesh.vertexSemantics = new uint8_t[submesh.vertexCountOutput];
submesh.indexCapacityInput = submesh.indexCountOutput;
submesh.indexCountOutput = 0;
submesh.indices = new uint32_t[submesh.indexCountOutput];
}
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 =
reinterpret_cast<XrSceneMeshSemanticLabelANDROID*>(data.vertexSemantics);
XrPosef pose = submeshesPoses[i];
// *** Use the data as per needs ***
// Release the allocated memory for the data buffers when done using
delete [] data.vertexPositions;
delete [] data.vertexNormals;
delete [] data.vertexSemantics;
delete [] data.indices;
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));
Yeni Nesne Türleri
Yeni Enum Sabitleri
XrObjectType numaralandırması şu öğelerle genişletildi:
XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID
XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
XrStructureType numaralandırması şu değerlerle genişletildi:
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
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_STATE_ANDROID
XR_TYPE_SCENE_SUBMESH_DATA_ANDROID
Yeni sıralamalar
Yeni Yapılar
- XrSystemSceneMeshingPropertiesANDROID
- XrSceneMeshingTrackerCreateInfoANDROID
- XrSceneMeshSnapshotCreateInfoANDROID
- XrSceneMeshSnapshotCreationResultANDROID
- XrSceneSubmeshStateANDROID
- XrSceneSubmeshDataANDROID
Yeni İşlevler
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrEnumerateSupportedSemanticLabelSetsANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
Sorunlar
Sürüm Geçmişi
- Sürüm 3, 15.05.2025 (Salar Khan) ** İlk uzantı açıklaması
OpenXR™ ve OpenXR logosu, The Khronos Group Inc. şirketinin ticari markalarıdır ve Çin, Avrupa Birliği, Japonya ve Birleşik Krallık'ta ticari marka olarak tescillidir.