XR_ANDROID_depth_texture
Name String
XR_ANDROID_depth_texture
Uzantı Türü
Örnek uzantısı
Kayıtlı Uzantı Numarası
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 IP 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ı, doğru sahne geometrisinden yararlanan belirli görevler (ör. sahte yüz algılama) için tıkanma, isabet testi ve diğer görevlerde ham ve düzgün derinliği ortaya çıkarmak amacıyla tasarlanmıştır.
Not
Derinlik haritaları çalışma zamanı tarafından oluşturulur ve XrDepthSwapchainANDROID kullanılarak uygulamayla paylaşılır . Çalışma zamanı, uygulama ö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ı, kimliği tanımlayabilecek bilgilerle (PII) ilgili endişeleri azaltmak için örneklenmiş bir derinlik dokusu sunar. Bu uzantı ortamın geometrisini ortaya çıkardığından Android uygulamalarının manifestlerinde android.permission.SCENE_UNDERSTANDING_FINE izninin listelenmesi gerekir. android.permission.SCENE_UNDERSTANDING_FINE izni tehlikeli bir izin olarak kabul edilir. Uygulama, bu işlevleri kullanmak için çalışma zamanında izni istemelidir:
(Koruma düzeyi: tehlikeli)
Sistem kapasitesini 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'ıdır.next,NULLveya 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.supportsDepthTracking, geçerli sistemin derinlik izlemeyi destekleyip desteklemediğini gösteren birXrBool32'dir.
Bir uygulama, xrGetSystemProperties çağrılırken XrSystemProperties'i XrSystemDepthTrackingPropertiesANDROID yapısıyla genişleterek sistemin derinlik takibi yapıp yapamayacağını kontrol edebilir .
Bir çalışma zamanı supportsDepthTracking için XR_FALSE döndürürse ve yalnızca bu durumda çalışma zamanı , xrCreateDepthSwapchainANDROID işlevinden 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. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Sorgu derinliği çözümleri
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 numaralandıran XrSession'dır.resolutionCapacityInput,resolutionskapasitesidir veya gerekli kapasiteyi almak için 0'dır.resolutionCountOutput,uint64_tresolutionsyazılanların sayısını gösteren bir işaretçidir veyaresolutionCapacityInputyetersizse gerekli kapasiteyi gösteren bir işaretçidir.resolutions, XrDepthCameraResolutionANDROID dizisine yönelik bir işaretçidir ancakresolutionCapacityInput,0ise olabilir.NULL- Gerekli
resolutionsboyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
xrEnumerateDepthResolutionsANDROID, mevcut oturum tarafından desteklenen derinlik çözünürlüklerini numaralandırır. Derinlik çözünürlükleri, en yüksek çalışma zamanı tercihinden en düşüğe doğru 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üresince 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 işleyeni olmalıdır. -
resolutionCountOutput,uint32_tdeğerine yönelik bir işaretçi olmalıdır. -
resolutionCapacityInput,0değilseresolutions,resolutionCapacityInputXrDepthCameraResolutionANDROID değerlerinden oluşan bir dizinin işaretçisi 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 numaralandırılmış türü, 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ırılmış Açıklamalar
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID— Derinlik ve güven resimlerinin çözünürlüğü 80x80'dir.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID— Derinlik ve güven resimlerinin çözünürlüğü 160x160'tır.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID— Derinlik ve güven resimlerinin çözünürlüğü 320x320'dir.
Derinlik swap zinciri oluşturma
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID, derinlik takas zinciri tutamacıdır.
xrCreateDepthSwapchainANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
Parametre Açıklamaları
session, derinlik swap zincirini oluşturan XrSession'dır.createInfo, takas zinciri oluşturmak için kullanılacak parametreleri içeren bir XrDepthSwapchainCreateInfoANDROID yapısının işaretçisidir.swapchain, oluşturulan XrDepthSwapchainANDROID değerinin döndürüldüğü bir tutamaç işaretçisidir.
Uygulama, hem derinlik hem de güven görüntülerini yöneten bir derinlik takas zinciri oluşturmak için xrCreateDepthSwapchainANDROID işlevini kullanabilir.
- Sistem derinlik izlemeyi desteklemiyorsa çalışma zamanı
XR_ERROR_FEATURE_UNSUPPORTEDdeğerini döndürmelidir. - Çalışma zamanı, gerekli izinler arayan uygulamaya verilmediyse mutlaka
XR_ERROR_PERMISSION_INSUFFICIENTdeğerini döndürmelidir. - Çalışma zamanı, XrDepthSwapchainCreateInfoANDROID içinde belirtilen derinlik çözünürlüğü desteklenmiyorsa
XR_ERROR_VALIDATION_FAILUREdeğerini döndürmelidir. - Çalışma zamanı, yalnızca takas zinciri oluşturulurken
createInfoiçin ilgili bitler ayarlandığında derinlik güveni görüntüleri oluşturmalıdır.
Döndürülen derinlik takas zinciri tutacağı, daha sonra API çağrılarında kullanılabilir. XrDepthSwapchainANDROID tutacağı, xrDestroyDepthSwapchainANDROID işlevi aracılığıyla en sonunda boşaltılmalıdır.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, xrCreateDepthSwapchainANDROID çağrılmadan önce etkinleştirilmelidir. -
sessiongeçerli bir XrSession işleyeni olmalıdır. -
createInfoGeçerli bir XrDepthSwapchainCreateInfoANDROID yapısına yönelik bir işaretçi olmalıdır. -
swapchainXrDepthSwapchainANDROID tanıtıcısına yönelik bir 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'ıdır.next,NULLveya 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.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 işlevine iletildiğinde XrDepthSwapchainANDROID için oluşturma seçenekleri sağlar .
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. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
resolutiongeçerli bir XrDepthCameraResolutionANDROID değeri olmalıdır. -
createFlagsmust be a valid combination of XrDepthSwapchainCreateFlagBitsANDROID values -
createFlags0olmamalı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 düzgün derinlik görüntüleri sağlayacağını gösterir.XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID: Swapchain'in sorunsuz derinlik güveni görüntüleri sağlayacağını gösterir.XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID: Swapchain'in işlenmemiş derinlik görüntüleri sağlayacağını gösterir.XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID: Swapchain'in işlenmemiş derinlik güveni 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 tutamacıdır .
xrDestroyDepthSwapchainANDROID işlevi, derinlik takas zincirini yok eder. Bu çağrıdan sonra çalışma zamanı, ilgili tüm belleği 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 tutma yeri olmalıdır.
Thread Safety
swapchainve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
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 kapasitenin alınması için istek olduğunu belirtmek üzere 0'dır.depthImageCountOutput, yazılandepthImagessayısının işaretçisidir veyadepthImageCapacityInputyetersizse gerekli kapasitenin işaretçisidir.depthImages, XrDepthSwapchainImageANDROID yapılarının dizisine yönelik bir işaretçidir.depthImageCapacityInput0 ise sonuçNULLolabilir.- Gerekli
depthImagesboyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
xrEnumerateDepthSwapchainImagesANDROID, XrDepthSwapchainImageANDROID yapıları dizisini 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 süresi boyunca bu numaralandırmadan her zaman aynı arabellek içeriklerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- xrEnumerateDepthSwapchainImagesANDROID çağrılmadan önce
XR_ANDROID_depth_textureuzantısı etkinleştirilmelidir. -
depthSwapchaingeçerli bir XrDepthSwapchainANDROID tutma yeri olmalıdır. -
depthImageCountOutput,uint32_tdeğerine yönelik bir işaretçi olmalıdır. -
depthImageCapacityInput,0değilsedepthImages,depthImageCapacityInputXrDepthSwapchainImageANDROID yapılarından oluşan bir dizinin işaretçisidepthImagesolmalı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'ıdır.next,NULLveya 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.rawDepthImage, çalışma zamanı tarafından ayrılan hem sol hem de sağ görünümler içinNULLveya ham derinlik görüntülerini gösteren işaretçidir. Değerler metre birimindedir. Özel değerler:0.0, ham derinlikte geçersiz veya boş bir derinlik pikselini,Infise etkili bir şekilde sonsuza kadar uzakta olan bilinen derinliği gösterir.rawDepthConfidenceImage,NULLveya çalışma zamanı tarafından ayrılan hem sol hem de sağ görünümler için ham derinlik güveni resimlerine yönelik işaretçidir.smoothDepthImage, çalışma zamanı tarafından ayrılan hem sol hem de sağ görünümler için düzgün derinlik görüntüleri sağlayanNULLveya işaretçidir. Değerler metre birimindedir. Özel değerler:0.0, düzgün derinlikte geçersiz veya boş bir derinlik pikselini,Infise etkili bir şekilde sonsuza kadar uzakta olan bilinen derinliği gösterir.smoothDepthConfidenceImage,NULLveya çalışma zamanı tarafından ayrılan hem sol hem de sağ görünümler için düzgün derinlik güveni görüntüleri işaretçisidir.
Görüntü arabelleği işaretçileri yalnızca takas zincirinin ömrü boyunca geçerli olur. Takas zinciri yok edildiğinde işaretçiler sarkan işaretçi olarak kabul edilir.
XrDepthSwapchainImageANDROID, XrDepthSwapchainANDROID'den okunan 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:
- Resim değerleri, satırlar arasında dolgu olmadan satır öncelikli sırada belleğe yerleştirilir.
- İlk değer sol üst, son değer ise sağ alttı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 ::resolutiondeğeriXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROIDise derinlik resimleri2*160*160*sizeof(float)boyutunda olur . - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROIDiçermiyorsarawDepthImagedeğeriNULLolmalıdır . - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROIDiçermiyorsarawDepthConfidenceImagedeğeriNULLolmalıdır . - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROIDiçermiyorsasmoothDepthImagedeğeriNULLolmalıdır . - XrDepthSwapchainCreateInfoANDROID ::
createFlags,XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROIDiçermiyorsasmoothDepthImagedeğeriNULLolmalıdır .
Geçerli Kullanım (Dolaylı)
- XrDepthSwapchainImageANDROID kullanılmadan önce
XR_ANDROID_depth_textureuzantısı etkinleştirilmelidir. -
typeXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
xrAcquireDepthSwapchainImagesANDROID işlevi şu şekilde tanımlanır:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
Parametre Açıklamaları
depthSwapchain, derinlik görüntüsü için XrDepthSwapchainANDROID tutamağıdır.acquireInfo, derinlik görüntüsünün nasıl elde edileceği hakkında bilgi içeren bir XrDepthAcquireInfoANDROID'dir.acquireResult, edinilen derinlik görüntüsü hakkında bilgi içeren döndürülen XrDepthAcquireResultANDROID'dir.
Uygulamalar, xrEnumerateDepthSwapchainImagesANDROID tarafından numaralandırılan XrDepthSwapchainImageANDROID dizisine xrAcquireDepthSwapchainImagesANDROID işlevini kullanarak mevcut en son swapchain görüntü dizinini (ör.XrDepthAcquireResultANDROID :: acquiredIndex) alabilir. can . Döndürülen XrDepthAcquireResultANDROID, derinlik verilerini yorumlamak için gerekli olan görüş alanı ve duruş gibi diğer bilgileri de içerir. xrAcquireDepthSwapchainImagesANDROID işlevine bir sonraki çağrıya kadar, görüntü dizisindeki edinilmiş yuvadan okuma işlemi güvenle yapılabilir .
Bir oturumda, karşılık gelen herhangi bir xrBeginFrame ve xrEndFrame çağrıları arasında xrAcquireDepthSwapchainImagesANDROID için en fazla bir çağrı olmalıdır.
- Daha önce edinilmiş takas zinciri resimleri çalışma zamanı tarafından kullanılmaya devam ediyorsa çalışma zamanı engelleyebilir.
- Çalışma zamanı, xrAcquireDepthSwapchainImagesANDROID, xrBeginFrame'den önce veya xrEndFrame'den sonra çağrılırsa
XR_ERROR_CALL_ORDER_INVALIDdeğerini döndürmelidir . - Çalışma zamanı, xrAcquireDepthSwapchainImagesANDROID kare başına birden fazla kez çağrılırsa (ör. xrEndFrame ile ilişkilendirilmemiş bir xrBeginFrame çağrısından sonra çalışan bir oturumda)
XR_ERROR_LIMIT_REACHEDdeğerini döndürmelidir. - Çalışma zamanı, ortam derinliği verileri henüz kullanılamıyorsa
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDdö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 tutma yeri olmalıdır. -
acquireInfoGeçerli bir XrDepthAcquireInfoANDROID yapısına yönelik bir işaretçi olmalıdır. -
acquireResultXrDepthAcquireResultANDROID 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'ıdır.next,NULLveya 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.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 poz için pozu hesaplamak üzere kullanılan zamanı belirten birXrTimedeğeridir . Uygulamalar, mevcut çerçeve için öngörülen görüntüleme süresini aşmalıdır.
Geçerli Kullanım (Dolaylı)
- XrDepthAcquireInfoANDROID kullanılmadan önce
XR_ANDROID_depth_textureuzantısı etkinleştirilmelidir. -
typeXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
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'ıdır.next,NULLveya 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.acquiredIndex, xrEnumerateDepthSwapchainImagesANDROID tarafından numaralandırılan XrDepthSwapchainImageANDROID dizisine edinilen dokunun dizinidir .exposureTimestamp, derinlik haritasının çekildiği zamanı belirtenXrTimedeğeridir.views, her göz için birer tane olmak üzere iki XrDepthViewANDROID dizisidir. Burada 0 dizini sol gözü, 1 dizini ise sağ gözü ifade eder.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_depth_textureuzantısı, XrDepthAcquireResultANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
viewsöğesinin herhangi bir öğesi, 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'ıdır.next,NULLveya 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.fov, bu görünümü oluşturmak için kullanılan görüş alanını belirten bir XrFovf değeridir. Görünüm hiçbir zaman yatay veya dikey olarak çevrilmez.pose, derinlik haritasının oluşturulduğu pozu belirten bir XrPosef değeridir. 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. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Derinlik izleme için örnek kod
Aşağıdaki örnek kod, derinlik görüntülerini edinme ve derinlik görüntü koordinatlarını sahne alanıyla eşlemek için derinlik değerlerini kullanma yöntemini gösterir.
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 Sıralamalar
Yeni bit maskeleri
Yeni Numaralandırılmış Değer 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, 2024-09-09 (Levana Chen)
- İlk uzantı açıklaması