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ı

OpenXR 1.0

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, 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.
  • supportsDepthTracking, mevcut sistemin derinlik izlemeyi destekleyip desteklemediğini gösteren bir XrBool32 değ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ı)

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, resolutions kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • resolutionCountOutput, yazılan uint64_t resolutions sayısına yönelik bir işaretçi veya resolutionCapacityInput yetersiz olduğunda gerekli kapasiteye yönelik bir işaretçidir.
  • resolutions, XrDepthCameraResolutionANDROID dizisine işaret eden bir işaretçidir ancak resolutionCapacityInput, 0 ise NULL olabilir.
  • Gerekli resolutions boyutunu 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_texture uzantısı, xrEnumerateDepthResolutionsANDROID çağrılmadan önce etkinleştirilmelidir
  • session geçerli bir XrSession herkese açık kullanıcı adı olmalıdır
  • resolutionCountOutput, bir uint32_t değerine işaretçi olmalıdır
  • resolutionCapacityInput, 0 değilse resolutions, resolutionCapacityInput XrDepthCameraResolutionANDROID değerlerinden oluşan bir diziye işaretçi 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

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_UNSUPPORTED değerini döndürmelidir (must).
  • Çağrı uygulamasına gerekli izinler verilmemişse çalışma zamanı XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir (must).
  • XrDepthSwapchainCreateInfoANDROID içinde belirtilen derinlik çözünürlüğü desteklenmiyorsa çalışma zamanı XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir.
  • Çalışma zamanı, yalnızca swapchain oluşturma sırasında createInfo iç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ı)

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_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_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ı

XrDepthSwapchainCreateInfoANDROID yapısı, xrCreateDepthSwapchainANDROID'e iletildiğinde XrDepthSwapchainANDROID için oluşturma seçenekleri sunar.

Geçerli Kullanım (Dolaylı)

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ı

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ı)

İleti Dizisi Güvenliği

  • swapchain 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

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, depthImages dizisinin kapasitesidir veya gerekli kapasiteyi alma isteğini belirtmek için 0'dır.
  • depthImageCountOutput, yazılan depthImages sayısına yönelik bir işaretçi veya depthImageCapacityInput değerinin yetersiz olması durumunda gerekli kapasiteye yönelik bir işaretçidir.
  • depthImages, XrDepthSwapchainImageANDROID yapılarından oluşan bir dizinin işaretçisidir. depthImageCapacityInput 0 ise NULL olabilir.
  • Gerekli depthImages boyutunu 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_texture uzantısı, xrEnumerateDepthSwapchainImagesANDROID çağrılmadan önce etkinleştirilmelidir.
  • depthSwapchain geçerli bir XrDepthSwapchainANDROID herkese açık kullanıcı adı olmalıdır
  • depthImageCountOutput, bir uint32_t değerine işaretçi olmalıdır
  • depthImageCapacityInput, 0 değilse depthImages, depthImageCapacityInput XrDepthSwapchainImageANDROID yapılarından oluşan bir diziye işaretçi 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

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, 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.
  • rawDepthImage, NULL veya ç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, NULL veya ç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, NULL veya ç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, NULL veya ç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:

Geçerli Kullanım (Dolaylı)

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

XrResult xrAcquireDepthSwapchainImagesANDROID(
    XrDepthSwapchainANDROID                     depthSwapchain,
    const XrDepthAcquireInfoANDROID*            acquireInfo,
    XrDepthAcquireResultANDROID*                acquireResult);

Parametre Açıklamaları

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_INVALID değ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_REACHED değerini döndürmelidir (must).
  • Ortam derinliği verileri henüz mevcut değilse çalışma zamanı XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID değerini döndürebilir. Bu durumda uygulama, daha sonraki bir karede xrAcquireDepthSwapchainImagesANDROID'i tekrar çağırmalıdır.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Hata

  • XR_ERROR_CALL_ORDER_INVALID
  • XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_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, 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.
  • space, XrDepthAcquireResultANDROID :: views içinde döndürülen pozun referans çerçevesini tanımlayan bir XrSpace'tir.
  • displayTime, XrDepthAcquireResultANDROID :: views içinde döndürülen pozun hesaplanması için kullanılan zamanı belirten bir XrTime değeridir. Uygulamalar, geçerli kare için tahmini görüntüleme sürelerini geçmelidir.

Geçerli Kullanım (Dolaylı)

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, 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.
  • acquiredIndex, xrEnumerateDepthSwapchainImagesANDROID tarafından numaralandırılan XrDepthSwapchainImageANDROID dizisindeki edinilen dokunun dizinidir.
  • exposureTimestamp, derinlik haritasının yakalandığı zamanı belirten XrTime değ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ı)

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, 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.
  • 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ı)

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

Yeni Yapılar

Yeni Enum Veri Türleri

Yeni Bit Maskeleri

Yeni Enum Sabitleri

  • XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAME
  • XR_ANDROID_depth_texture_SPEC_VERSION
  • XrObjectType'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_ANDROID
    • XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
    • XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID
    • XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
    • XR_TYPE_DEPTH_VIEW_ANDROID
    • XR_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ı