XR_ANDROID_depth_texture
Name String
XR_ANDROID_depth_texture
Uzantı Türü
Örnek uzantısı
Kayıtlı Dahili Numara
703
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2024-09-11
IP Durumu
Bilinen bir fikri mülkiyet hak talebi yok.
Katkıda bulunanlar
Sushant Kulkarni, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Genel Bakış
Bu uzantı, uygulamanın başlığın etrafındaki gerçek dünya ortamının derinlik haritalarını istemesine ve oluşturma sırasında desteklenen derinlik çözünürlüklerini sorgulamasına olanak tanır.
Bu uzantı, oklüzyon, isabet testleri ve doğru sahne geometrisinden yararlanan diğer belirli görevler (ör. sahte yüz algılama) için ham ve düzgün derinliği göstermeyi amaçlar.
Not
Derinlik haritaları, çalışma zamanı tarafından oluşturulur ve XrDepthSwapchainANDROID kullanılarak uygulamayla paylaşılır. Çalışma zamanı, uygulamanın kullanım ömrü boyunca xrEnumerateDepthResolutionsANDROID aracılığıyla döndürülen derinlik görüntüsü çözünürlüklerini değiştirmemelidir.
İzinler
Bu uzantı, kişisel veri (PII) endişelerini azaltmak için alt örneklenmiş bir derinlik dokusu sunar. Bu uzantı, ortamın geometrisini gösterdiğinden Android uygulamalarının manifest dosyasında android.permission.SCENE_UNDERSTANDING_FINE izni bulunmalıdır. android.permission.SCENE_UNDERSTANDING_FINE izni tehlikeli bir izin 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
XrSystemDepthTrackingPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya 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.supportsDepthTracking, mevcut sistemin derinlik izlemeyi destekleyip desteklemediğini gösteren birXrBool32değeridir.
Bir uygulama, xrGetSystemProperties çağrısı yaparken XrSystemProperties'i XrSystemDepthTrackingPropertiesANDROID yapısıyla genişleterek sistemin derinlik takibi yapıp yapamayacağını inceleyebilir.
Yalnızca bir çalışma zamanı supportsDepthTracking için XR_FALSE döndürürse çalışma zamanı xrCreateDepthSwapchainANDROID'den XR_ERROR_FEATURE_UNSUPPORTED döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, XrSystemDepthTrackingPropertiesANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Sorgu derinliği çözünürlükleri
xrEnumerateDepthResolutionsANDROID işlevi şu şekilde tanımlanır:
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
Parametre Açıklamaları
session, desteklenen derinlik çözünürlüklerini listeleyen XrSession'dır.resolutionCapacityInput,resolutionskapasitesidir veya gerekli kapasiteyi almak için 0'dır.resolutionCountOutput, yazılanuint64_tresolutionssayısına yönelik bir işaretçi veyaresolutionCapacityInputyetersiz olduğunda gerekli kapasiteye yönelik bir işaretçidir.resolutions, XrDepthCameraResolutionANDROID dizisine işaret eden bir işaretçidir ancakresolutionCapacityInput,0iseNULLolabilir.- Gerekli
resolutionsboyutunu alma hakkında ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
xrEnumerateDepthResolutionsANDROID, mevcut oturumun desteklediği derinlik çözünürlüklerini listeler. Derinlik çözünürlükleri, en yüksekten en düşüğe doğru çalışma zamanı tercihine göre sıralanmalıdır. Uygulama, optimum performans ve kalite için desteklediği en yüksek tercihi kullanmalıdır.
Çalışma zamanları, oturum süresi boyunca bu numaralandırmadan her zaman aynı arabellek içeriklerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, xrEnumerateDepthResolutionsANDROID çağrılmadan önce etkinleştirilmelidir -
sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır -
resolutionCountOutput, biruint32_tdeğerine işaretçi olmalıdır -
resolutionCapacityInput,0değilseresolutions,resolutionCapacityInputXrDepthCameraResolutionANDROID değerlerinden oluşan bir diziye işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
XrDepthCameraResolutionANDROID enum, XrDepthSwapchainANDROID oluşturulurken desteklenen derinlik çözünürlüklerini açıklar.
typedef enum XrDepthCameraResolutionANDROID {
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID = 0,
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID = 1,
XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID = 2,
XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;
Numaralandırma Açıklamaları
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID: Derinlik ve güven görüntülerinin çözünürlüğü 80x80'dir.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID: Derinlik ve güvenilirlik görüntülerinin çözünürlüğü 160x160'tır.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID: Derinlik ve güvenilirlik görüntülerinin çözünürlüğü 320x320'dir.
Derinlik takas zinciri oluşturma
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID, derinlik takas zinciri herkese açık kullanıcı adıdır.
xrCreateDepthSwapchainANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
Parametre Açıklamaları
session, derinlik takas zincirini oluşturan XrSession'dır.createInfo, takas zincirini oluşturmak için kullanılacak parametreleri içeren bir XrDepthSwapchainCreateInfoANDROID yapısına işaret eden bir işaretçidir.swapchain, oluşturulan XrDepthSwapchainANDROID'in döndürüldüğü bir herkese açık kullanıcı adına işaretçidir.
Uygulama, hem derinlik hem de güvenilirlik görüntülerini yöneten bir derinlik takas zinciri oluşturmak için xrCreateDepthSwapchainANDROID işlevini kullanabilir.
- Sistem, derinlik takibini desteklemiyorsa çalışma zamanı
XR_ERROR_FEATURE_UNSUPPORTEDdeğerini döndürmelidir (must). - Çağrı uygulamasına gerekli izinler verilmemişse çalışma zamanı
XR_ERROR_PERMISSION_INSUFFICIENTdeğerini döndürmelidir (must). - XrDepthSwapchainCreateInfoANDROID içinde belirtilen derinlik çözünürlüğü desteklenmiyorsa çalışma zamanı
XR_ERROR_VALIDATION_FAILUREdeğerini döndürmelidir. - Çalışma zamanı, yalnızca swapchain oluşturma sırasında
createInfoiçin ilgili bitler ayarlandığında derinlik güvenilirliği görüntüleri oluşturmalıdır.
Döndürülen derinlik swapchain herkese açık anahtarı daha sonra API çağrılarında kullanılabilir. XrDepthSwapchainANDROID herkese açık anahtarı, xrDestroyDepthSwapchainANDROID işlevi aracılığıyla serbest bırakılmalıdır.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, xrCreateDepthSwapchainANDROID çağrılmadan önce etkinleştirilmelidir. -
sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır -
createInfo, geçerli bir XrDepthSwapchainCreateInfoANDROID yapısına işaretçi olmalıdır. -
swapchain, bir XrDepthSwapchainANDROID herkese açık kullanıcı adına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
XrDepthSwapchainCreateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya 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.resolution, derinlik ve güven dokularının oluşturulduğu XrDepthCameraResolutionANDROID'dir.createFlags, bir veya daha fazla XrDepthSwapchainCreateFlagsANDROID değeridir.
XrDepthSwapchainCreateInfoANDROID yapısı, xrCreateDepthSwapchainANDROID'e iletildiğinde XrDepthSwapchainANDROID için oluşturma seçenekleri sunar.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, XrDepthSwapchainCreateInfoANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
resolutiongeçerli bir XrDepthCameraResolutionANDROID değeri olmalıdır -
createFlags, XrDepthSwapchainCreateFlagBitsANDROID değerlerinin geçerli bir kombinasyonu olmalıdır -
createFlags,0olmamalıdır
XrDepthSwapchainCreateFlagsANDROID, XrDepthSwapchainANDROID için oluşturma seçeneklerini belirtir.
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
XrDepthSwapchainCreateFlagsANDROID için geçerli bitler, XrDepthSwapchainCreateFlagBitsANDROID tarafından tanımlanır ve şu şekilde belirtilir:
// Flag bits for XrDepthSwapchainCreateFlagsANDROID
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID = 0x00000001;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000002;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID = 0x00000004;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000008;
İşaret Açıklamaları
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID: Swapchain'in pürüzsüz derinlik resimleri sağlayacağını gösterir.XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID: Swapchain'in düzgün derinlik güvenilirliği görüntüleri sağlayacağını gösterir.XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID: Swapchain'in ham derinlik görüntüleri sağlayacağını gösterir.XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID: Swapchain'in ham derinlik güvenilirlik görüntüleri sağlayacağını gösterir.
xrDestroyDepthSwapchainANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
Parametre Açıklamaları
swapchain, daha önce xrCreateDepthSwapchainANDROID tarafından oluşturulmuş bir XrDepthSwapchainANDROID herkese açık anahtarıdır.
xrDestroyDepthSwapchainANDROID işlevi, derinlik takas zincirini yok eder. Bu çağrıdan sonra çalışma zamanı, ilgili tüm bellek ve kaynakları serbest bırakabilir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, xrDestroyDepthSwapchainANDROID çağrılmadan önce etkinleştirilmelidir. -
swapchaingeçerli bir XrDepthSwapchainANDROID herkese açık kullanıcı adı olmalıdır
İleti Dizisi Güvenliği
swapchainve tüm alt herkese açık kullanıcı adlarına erişim harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Derinlik dokularına erişme
xrEnumerateDepthSwapchainImagesANDROID işlevi şu şekilde tanımlanır:
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
Parametre Açıklamaları
depthSwapchain, resimlerin alınacağı XrDepthSwapchainANDROID'dir.depthImageCapacityInput,depthImagesdizisinin kapasitesidir veya gerekli kapasiteyi alma isteğini belirtmek için 0'dır.depthImageCountOutput, yazılandepthImagessayısına yönelik bir işaretçi veyadepthImageCapacityInputdeğerinin yetersiz olması durumunda gerekli kapasiteye yönelik bir işaretçidir.depthImages, XrDepthSwapchainImageANDROID yapılarından oluşan bir dizinin işaretçisidir.depthImageCapacityInput0 iseNULLolabilir.- Gerekli
depthImagesboyutunu alma hakkında ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
xrEnumerateDepthSwapchainImagesANDROID, XrDepthSwapchainImageANDROID yapılarından oluşan bir diziyi doldurur. Kaynaklar, XrDepthSwapchainANDROID'in kullanım ömrü boyunca sabit ve geçerli olmalıdır. Bu işlev, xrEnumerateSwapchainImages ile benzer şekilde çalışır.
Çalışma zamanı, takas zincirinin kullanım ömrü boyunca bu numaralandırmadan her zaman aynı arabellek içeriklerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, xrEnumerateDepthSwapchainImagesANDROID çağrılmadan önce etkinleştirilmelidir. -
depthSwapchaingeçerli bir XrDepthSwapchainANDROID herkese açık kullanıcı adı olmalıdır -
depthImageCountOutput, biruint32_tdeğerine işaretçi olmalıdır -
depthImageCapacityInput,0değilsedepthImages,depthImageCapacityInputXrDepthSwapchainImageANDROID yapılarından oluşan bir diziye işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
XrDepthSwapchainImageANDROID yapısı şu şekilde tanımlanır:
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya 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.rawDepthImage,NULLveya çalışma zamanı tarafından ayrılan hem sol hem de sağ görünümler için ham derinlik görüntülerinin işaretçisidir. Değerler metre cinsindendir. Özel değerler:0.0, ham derinlikte geçersiz veya boş bir derinlik pikselini gösterir,Inf, etkili bir şekilde sonsuz uzaklıkta olduğu bilinen derinliği gösterir,rawDepthConfidenceImage,NULLveya çalışma zamanı tarafından tahsis edilen hem sol hem de sağ görünümler için ham derinlik güven görüntülerinin işaretçisidir.smoothDepthImage,NULLveya çalışma zamanı tarafından tahsis edilen hem sol hem de sağ görünümler için düzgün derinlik görüntülerinin işaretçisidir. Değerler metre cinsindendir. Özel değerler:0.0, düzgün derinlikte geçersiz veya boş bir derinlik pikselini gösterir.Inf, etkili bir şekilde sonsuz uzaklıkta olduğu bilinen derinliği gösterir.smoothDepthConfidenceImage,NULLveya çalışma zamanı tarafından tahsis edilen hem sol hem de sağ görünümler için düzgün derinlik güvenilirliği görüntülerinin işaretçisidir.
Görüntü arabelleği işaretçileri yalnızca takas zincirinin ömrü boyunca geçerli olur. Takas zinciri yok edildikten sonra işaretçiler sarkan olarak kabul edilir.
XrDepthSwapchainImageANDROID, okunabilir bir XrDepthSwapchainANDROID'deki derinlik resimlerini temsil eder. Bu resimler, xrCreateDepthSwapchainANDROID çağrılırken XrDepthSwapchainCreateInfoANDROID :: resolution ve XrDepthSwapchainCreateInfoANDROID :: createFlags içinde açıklandığı şekilde ayrılır. Her derinlik resmi için:
- Görüntü değerleri, satırlar arasında dolgu olmadan satır öncelikli düzende belleğe yerleştirilir.
- İlk değer sol üst, son değer ise sağ alt kısımdır.
- İşaret edilen belleğin boyutu, xrEnumerateDepthSwapchainImagesANDROID değerine göre belirlenir ve xrCreateDepthSwapchainANDROID çağrılırken XrDepthSwapchainCreateInfoANDROID ::
resolutiontarafından ayarlanır. Örneğin, XrDepthSwapchainCreateInfoANDROID ::resolution,XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROIDise derinlik resimlerinin boyutu2*160*160*sizeof(float)olur. - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROIDdeğerini içermiyorsarawDepthImagedeğeriNULLolmalıdır. - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROIDdeğerini içermiyorsarawDepthConfidenceImagedeğeriNULLolmalıdır. - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROIDdeğerini içermiyorsasmoothDepthImagedeğeriNULLolmalıdır. - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROIDdeğerini içermiyorsasmoothDepthImagedeğeriNULLolmalıdır.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, XrDepthSwapchainImageANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
xrAcquireDepthSwapchainImagesANDROID işlevi şu şekilde tanımlanır:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
Parametre Açıklamaları
depthSwapchain, derinlik resmi için bir XrDepthSwapchainANDROID tutma yeridir.acquireInfo, derinlik görüntüsünün nasıl alınacağıyla ilgili bilgileri içeren bir XrDepthAcquireInfoANDROID'dir.acquireResult, alınan derinlik görüntüsü hakkında bilgi içeren, döndürülen XrDepthAcquireResultANDROID değeridir.
Uygulamalar, xrEnumerateDepthSwapchainImagesANDROID tarafından numaralandırılan XrDepthSwapchainImageANDROID dizisine en son kullanılabilir swapchain resim dizinini (ör. XrDepthAcquireResultANDROID :: acquiredIndex ) almak için xrAcquireDepthSwapchainImagesANDROID işlevini kullanabilir . Döndürülen XrDepthAcquireResultANDROID, derinlik verilerini yorumlamak için gerekli olan görüş alanı ve poz gibi diğer bilgileri de içerir. Bir sonraki xrAcquireDepthSwapchainImagesANDROID çağrısına kadar, görüntü dizisindeki edinilen yuvadan okuma yapmak güvenlidir.
Bir oturumda, karşılık gelen her xrBeginFrame ve xrEndFrame çağrısı çifti arasında en fazla bir xrAcquireDepthSwapchainImagesANDROID çağrısı olmalıdır.
- Daha önce edinilen takas zinciri görüntüleri çalışma zamanı tarafından kullanılmaya devam ediyorsa çalışma zamanı engellenebilir.
- xrAcquireDepthSwapchainImagesANDROID, xrBeginFrame'den önce veya xrEndFrame'den sonra çağrılırsa çalışma zamanı
XR_ERROR_CALL_ORDER_INVALIDdeğerini döndürmelidir. - Çalışma zamanı, xrAcquireDepthSwapchainImagesANDROID kare başına birden fazla kez çağrılırsa (ör. çalışan bir oturumda, ilişkili bir xrEndFrame içermeyen bir xrBeginFrame çağrısından sonra)
XR_ERROR_LIMIT_REACHEDdeğerini döndürmelidir (must). - Ortam derinliği verileri henüz mevcut değilse çalışma zamanı
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDdeğerini döndürebilir. Bu durumda uygulama, daha sonraki bir karede xrAcquireDepthSwapchainImagesANDROID'i tekrar çağırmalıdır.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, xrAcquireDepthSwapchainImagesANDROID çağrılmadan önce etkinleştirilmelidir. -
depthSwapchaingeçerli bir XrDepthSwapchainANDROID herkese açık kullanıcı adı olmalıdır -
acquireInfo, geçerli bir XrDepthAcquireInfoANDROID yapısına işaretçi olmalıdır. -
acquireResult, bir XrDepthAcquireResultANDROID yapısına işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrDepthAcquireInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya 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.space, XrDepthAcquireResultANDROID ::viewsiçinde döndürülen pozun referans çerçevesini tanımlayan bir XrSpace'tir.displayTime, XrDepthAcquireResultANDROID ::viewsiçinde döndürülen pozun hesaplanması için kullanılan zamanı belirten birXrTimedeğeridir. Uygulamalar, geçerli kare için tahmini görüntüleme sürelerini geçmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, XrDepthAcquireInfoANDROID kullanılmadan önce etkinleştirilmelidir -
typeXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
spacegeçerli bir XrSpace hesabı olmalıdır
XrDepthAcquireResultANDROID yapısı şu şekilde tanımlanır:
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya 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.acquiredIndex, xrEnumerateDepthSwapchainImagesANDROID tarafından numaralandırılan XrDepthSwapchainImageANDROID dizisindeki edinilen dokunun dizinidir.exposureTimestamp, derinlik haritasının yakalandığı zamanı belirtenXrTimedeğeridir.views, her göz için bir tane olmak üzere iki XrDepthViewANDROID dizisidir. Burada dizin 0 sol göz, dizin 1 ise sağ gözdür.
Geçerli Kullanım (Dolaylı)
- XrDepthAcquireResultANDROID kullanılmadan önce
XR_ANDROID_depth_textureuzantısı etkinleştirilmelidir -
typeXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
viewsöğesinin tüm öğeleri geçerli bir XrDepthViewANDROID yapısı olmalıdır.
XrDepthViewANDROID yapısı şu şekilde tanımlanır:
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya 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.fov, bu görünümü oluşturmak için kullanılan görüş alanını belirten bir XrFovf'dir. Görünüm hiçbir zaman yatay veya dikey olarak çevrilmez.pose, derinlik haritasının oluşturulduğu pozu belirten bir XrPosef'dir. Referans çerçevesi XrDepthAcquireInfoANDROID içinde belirtilir.
Geçerli Kullanım (Dolaylı)
- XrDepthViewANDROID kullanılmadan önce
XR_ANDROID_depth_textureuzantısı etkinleştirilmelidir. -
typeXR_TYPE_DEPTH_VIEW_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
Derinlik izleme için örnek kod
Aşağıdaki örnek kodda, derinlik görüntülerinin nasıl alınacağı ve derinlik görüntüsü koordinatlarını sahne alanıyla eşlemek için derinlik değerlerinin nasıl kullanılacağı gösterilmektedir.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace stageSpace; // space created for XR_REFERENCE_SPACE_TYPE_STAGE.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateDepthSwapchainANDROID xrCreateDepthSwapchainANDROID; // previously initialized
PFN_xrDestroyDepthSwapchainANDROID xrDestroyDepthSwapchainANDROID; // previously initialized
PFN_xrEnumerateDepthSwapchainImagesANDROID xrEnumerateDepthSwapchainImagesANDROID; // previously initialized
PFN_xrEnumerateDepthResolutionsANDROID xrEnumerateDepthResolutionsANDROID; // previously initialized
PFN_xrAcquireDepthSwapchainImagesANDROID xrAcquireDepthSwapchainImagesANDROID; // previously initialized
float tanf(float);
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemDepthTrackingPropertiesANDROID depthTrackingProperties{XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID};
properties.next = &depthTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!depthTrackingProperties.supportsDepthTracking) {
// depth tracking is not supported.
return;
}
// Query the supported depth resolution.
XrDepthCameraResolutionANDROID supportedDepthResolution;
uint32_t supportedResolutionCount = 0;
CHK_XR(xrEnumerateDepthResolutionsANDROID(
session, 1, &supportedResolutionCount, &supportedDepthResolution));
// Define metadata to access the raw and smooth depth along with confidences.
XrDepthSwapchainCreateInfoANDROID swapchainCreateInfo = {
.type = XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID,
.next = nullptr,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
.createFlags =
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID,
};
XrDepthSwapchainANDROID depthSwapchain;
CHK_XR(xrCreateDepthSwapchainANDROID(
session, &swapchainCreateInfo, &depthSwapchain));
// Enumerate depth images.
uint32_t imageCountOutput = 0;
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, 0, &imageCountOutput, nullptr));
std::vector<XrDepthSwapchainImageANDROID> depthImages(imageCountOutput);
for (int i = 0; i < imageCountOutput; i++) {
depthImages[i].type = XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID;
}
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, imageCountOutput, &imageCountOutput, depthImages.data()));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrDepthAcquireInfoANDROID acquireInfo = {
.type = XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID,
.space = stageSpace,
.displayTime = time
};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthSwapchainImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code below shows how to find the stageSpace position of
// the point corresponding to a particular value in the depth image.
// For this sample code, assume we are using a right handed coordinate system
// with +X to the right, +Y up and -Z forward.
XrDepthSwapchainImageANDROID *image =
&depthImages[acquireResult.acquiredIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = 80; // value in [0, imageResolution)
int imageX = 80; // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value is obtained with the following expression:
// depthR = image->rawDepthImage[imageResolution*imageResolution+i*imageResolution+j]
float depthL = image->rawDepthImage[imageY*imageResolution + imageX];
XrDepthViewANDROID viewL = acquireResult.views[0];
float tanL = tanf(viewL.fov.angleLeft);
float tanR = tanf(viewL.fov.angleRight);
float tanU = tanf(viewL.fov.angleUp);
float tanD = tanf(viewL.fov.angleDown);
float s = (imageX + 0.5f) / (float)imageResolution;
float t = (imageY + 0.5f) / (float)imageResolution;
// Calculate the depth camera space position of the point
// corresponding to this depth value.
XrVector3f posInCameraSpace;
posInCameraSpace.z = -depthL;
posInCameraSpace.x = (tanL + (tanR - tanL)*s)*depthL;
posInCameraSpace.y = (tanD + (tanU - tanD)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
Yeni nesne türleri
Yeni Komutlar
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
Yeni Yapılar
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
XrSystemProperties'i genişletme:
Yeni Enum Veri Türleri
Yeni Bit Maskeleri
Yeni Enum Sabitleri
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAMEXR_ANDROID_depth_texture_SPEC_VERSIONXrObjectType'i genişletme:
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
XrResult'ı genişletme:
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
XrStructureType'ı genişletme:
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDXR_TYPE_DEPTH_VIEW_ANDROIDXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
Sayılar
Sürüm Geçmişi
Düzeltme 1, 09.09.2024 (Levana Chen)
- İlk uzantı açıklaması