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ı

OpenXR 1.0

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

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 , resolutions kapasitesidir veya gerekli kapasiteyi almak için 0'dır.
  • resolutionCountOutput, uint64_t resolutions yazılanların sayısını gösteren bir işaretçidir veya resolutionCapacityInput yetersizse gerekli kapasiteyi gösteren bir işaretçidir.
  • resolutions, XrDepthCameraResolutionANDROID dizisine yönelik bir işaretçidir ancak resolutionCapacityInput, 0 ise olabilir.NULL
  • Gerekli resolutions boyutunun 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_texture uzantısı, xrEnumerateDepthResolutionsANDROID çağrılmadan önce etkinleştirilmelidir.
  • session geçerli bir XrSession işleyeni olmalıdır.
  • resolutionCountOutput, uint32_t değerine yönelik bir işaretçi olmalıdır.
  • resolutionCapacityInput, 0 değilse resolutions, resolutionCapacityInput XrDepthCameraResolutionANDROID değerlerinden oluşan bir dizinin işaretçisi olmalıdır.

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

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

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_UNSUPPORTED değerini döndürmelidir.
  • Çalışma zamanı, gerekli izinler arayan uygulamaya verilmediyse mutlaka XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir.
  • Çalışma zamanı, XrDepthSwapchainCreateInfoANDROID içinde belirtilen derinlik çözünürlüğü desteklenmiyorsa XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir.
  • Çalışma zamanı, yalnızca takas zinciri oluşturulurken createInfo iç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ı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • 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 işlevine iletildiğinde XrDepthSwapchainANDROID için oluşturma seçenekleri sağlar .

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

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

Thread Safety

  • swapchain ve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.

Dönüş Kodları

Başarılı

  • XR_SUCCESS

Başarısız

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_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, depthImages dizisinin kapasitesidir veya gerekli kapasitenin alınması için istek olduğunu belirtmek üzere 0'dır.
  • depthImageCountOutput, yazılan depthImages sayısının işaretçisidir veya depthImageCapacityInput yetersizse gerekli kapasitenin işaretçisidir.
  • depthImages, XrDepthSwapchainImageANDROID yapılarının dizisine yönelik bir işaretçidir. depthImageCapacityInput 0 ise sonuç NULL olabilir.
  • Gerekli depthImages boyutunun 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_texture uzantısı etkinleştirilmelidir.
  • depthSwapchain geçerli bir XrDepthSwapchainANDROID tutma yeri olmalıdır.
  • depthImageCountOutput, uint32_t değerine yönelik bir işaretçi olmalıdır.
  • depthImageCapacityInput, 0 değilse depthImages, depthImageCapacityInput XrDepthSwapchainImageANDROID yapılarından oluşan bir dizinin işaretçisi depthImages olmalıdır.

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • 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'ı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.
  • rawDepthImage, çalışma zamanı tarafından ayrılan hem sol hem de sağ görünümler için NULL veya 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, Inf ise etkili bir şekilde sonsuza kadar uzakta olan bilinen derinliği gösterir.
  • rawDepthConfidenceImage, NULL veya ç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ğlayan NULL veya işaretçidir. Değerler metre birimindedir. Özel değerler: 0.0, düzgün derinlikte geçersiz veya boş bir derinlik pikselini, Inf ise etkili bir şekilde sonsuza kadar uzakta olan bilinen derinliği gösterir.
  • smoothDepthConfidenceImage, NULL veya ç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:

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 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.

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • 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'ı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.
  • 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 poz için pozu hesaplamak üzere kullanılan zamanı belirten bir XrTime değ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ı)

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

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

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

Yeni Yapılar

Yeni Sıralamalar

Yeni bit maskeleri

Yeni Numaralandırılmış Değer 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, 2024-09-09 (Levana Chen)

    • İlk uzantı açıklaması