Ad dizesi
XR_ANDROID_depth_texture
Uzantı Türü
Örnek uzatma
Kayıtlı Uzatma Numarası
703
Düzeltme
1
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2024-09-11
IP Durumu
Bilinen IP hak talepleri yok.
Katkıda bulunanlar
Sushant Kulkarni, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Genel Bakış
Bu uzantı, uygulamanın kulaklığın etrafındaki gerçek dünya ortamının derinlik haritalarını istemesine ve oluşturulurken desteklenen derinlik çözünürlüklerini sorgulamasına olanak tanır.
Bu uzantı, gölgeleme, isabet testleri ve doğru sahne geometrisinden yararlanan diğer belirli görevler (ör. sahte yüz algılama) için ham ve pürüzsüz derinlik göstermeyi amaçlar.
Sistem kapasitesini inceleme
XrSystemDepthTrackingPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
const void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
Üye Açıklamaları
type
, bu yapının XrStructureType değeridir.next
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.supportsDepthTracking
, mevcut sistemin derinlik izlemeyi destekleyip desteklemediğini belirten birXrBool32
değeridir.
Bir uygulama, xrGetSystemProperties çağrısında XrSystemProperties'i XrSystemDepthTrackingPropertiesANDROID yapısıyla genişleterek sistemin derinlik izleme yapıp yapamayacağını inceleyebilir.
Geçerli Kullanım (Dolayı)
- XrSystemDepthTrackingPropertiesANDROID kullanılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. type
XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.
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 listeleyen XrSession bağımsız değişkenidir.resolutionCapacityInput
,resolutions
öğesinin kapasitesidir veya gerekli kapasiteyi almak için 0 değerini alır.resolutionCountOutput
, yazılanuint64_t
resolutions
sayısının işaretçisidir veyaresolutionCapacityInput
yetersiz olduğunda gereken kapasitenin işaretçisidir.resolutions
, XrDepthCameraResolutionANDROID dizisinin işaretçisidir ancakresolutionCapacityInput
0 iseNULL
olabilir.- Gerekli
resolutions
boyutunu almayla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
xrEnumerateDepthResolutionsANDROID, geçerli oturum tarafından desteklenen 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 olmalıdır. Uygulama, optimum performans ve kalite için desteklediği en yüksek tercihi kullanmalıdır.
Geçerli Kullanım (Dolayı)
- xrEnumerateDepthResolutionsANDROID çağrısı yapılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. session
geçerli bir XrSession herkese açık kullanıcı adı olmalıdır.resolutionCountOutput
,uint32_t
değerine işaret eden bir işaretçi olmalıdır.resolutionCapacityInput
0 değilseresolutions
,resolutionCapacityInput
XrDepthCameraResolutionANDROID değerleri dizisine işaretçi olmalıdır.
İade Kodları
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_SIZE_INSUFFICIENT
XrDepthCameraResolutionANDROID enum, XrDepthSwapchainANDROID oluştururken 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
} XrDepthCameraResolutionANDROID;
Listeleme Açıklamaları
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID
: Derinlik ve güven resimlerinin çözünürlüğü 80x80'tir.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'tir.
Derinlik takas zinciri oluşturma
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID, derinlik takas zinciri sapları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'dir.createInfo
, takas zincirini oluşturmak için kullanılacak parametreleri içeren bir XrDepthSwapchainCreateInfoANDROID yapısının işaretçisidir.swapchain
, oluşturulan XrDepthSwapchainANDROID nesnesinin döndürüldüğü bir tutamacın işaretçisidir.
Uygulama, hem derinlik hem de güvenilirlik resimlerini yöneten bir derinlik takas zinciri oluşturmak için xrCreateDepthSwapchainANDROID işlevini kullanabilir.
Döndürülen derinlik takas zinciri daha sonra API çağrılarında kullanılabilir. XrDepthSwapchainANDROID mülkünün xrDestroyDepthSwapchainANDROID işlevi kullanılarak serbest bırakılması gerekir.
Geçerli Kullanım (Dolayı)
- xrCreateDepthSwapchainANDROID çağrılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. session
geçerli bir XrSession herkese açık kullanıcı adı olmalıdır.createInfo
, geçerli bir XrDepthSwapchainCreateInfoANDROID yapısının işaretçisi olmalıdır.swapchain
XrDepthSwapchainANDROID işleyicisinin işaretçisi olmalıdır
İade Kodları
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_HANDLE_INVALID
XR_ERROR_LIMIT_REACHED
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
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.resolution
, derinlik ve güven dokularının oluşturulması gereken XrDepthCameraResolutionANDROID değeridir.createFlags
, bir veya daha fazla XrDepthSwapchainCreateFlagsANDROID bağımsız değişkenidir.
XrDepthSwapchainCreateInfoANDROID yapısı, xrCreateDepthSwapchainANDROID işlevine aktarıldığında XrDepthSwapchainANDROID için oluşturma seçenekleri sağlar.
Geçerli Kullanım (Dolayı)
- XrDepthSwapchainCreateInfoANDROID kullanılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. type
XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.resolution
geçerli bir XrDepthCameraResolutionANDROID değeri olmalıdır.createFlags
, XrDepthSwapchainCreateFlagBitsANDROID değerlerinin geçerli bir kombinasyonu olmalıdır.createFlags
0 olmamalı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;
xrDestroyDepthSwapchainANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
Parametre Açıklamaları
swapchain
, daha öncexrCreateDepthSwapchainANDROID
tarafından oluşturulmuş bir XrDepthSwapchainANDROID dizinidir.
xrDestroyDepthSwapchainANDROID işlevi, derinlik takas zincirini yok eder.
Geçerli Kullanım (Dolayı)
- xrDestroyDepthSwapchainANDROID çağrılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. swapchain
geçerli bir XrDepthSwapchainANDROID kolu olmalıdır.
Thread Güvenliği
swapchain
ve alt herkese açık kimliklere erişim, harici olarak senkronize edilmelidir.
İade Kodları
XR_SUCCESS
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 bağımsız değişkenidir.depthImageCapacityInput
,depthImages
dizisinin kapasitesidir veya gerekli kapasiteyi alma isteğini belirtmek için 0 değerini alır.depthImageCountOutput
, yazılandepthImages
sayısının işaretçisidir veyadepthImageCapacityInput
yetersiz olduğunda gereken kapasitenin işaretçisidir.depthImages
, XrDepthSwapchainImageANDROID yapılarının bir dizisinin işaretçisidir.depthImageCapacityInput
0 iseNULL
olabilir.- Gerekli
depthImages
boyutunu almayla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
xrEnumerateDepthSwapchainImagesANDROID, XrDepthSwapchainImageANDROID yapılarının bir dizisini doldurur. Kaynaklar, XrDepthSwapchainANDROID'ın kullanım ömrü boyunca sabit ve geçerli olur. Bu işlev, xrEnumerateSwapchainImages işlevine benzer şekilde çalışır.
Geçerli Kullanım (Dolayı)
- xrEnumerateDepthSwapchainImagesANDROID çağrılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. depthSwapchain
geçerli bir XrDepthSwapchainANDROID olmalıdırdepthImageCountOutput
,uint32_t
değerine işaret eden bir işaretçi olmalıdır.depthImageCapacityInput
0 değilsedepthImages
,depthImageCapacityInput
XrDepthSwapchainImageANDROID yapılarının dizisine işaret eden bir işaretçi olmalıdır.
İade Kodları
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_SIZE_INSUFFICIENT
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ının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.rawDepthImage
,NULL
veya 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 pikseli gösterir,Inf
ise etkili bir şekilde sonsuz uzaklıktaki bilinen derinliği gösterir.rawDepthConfidenceImage
,NULL
veya hem sol hem de sağ görünümler için ham derinlik güvenilirlik resimlerinin işaretçisidir.smoothDepthImage
,NULL
veya hem sol hem de sağ görünümler için derinlik görüntülerini yumuşatan işaretçidir. Değerler metre cinsindendir. Özel değerler:0.0
, pürüzsüz derinlikte geçersiz veya boş bir derinlik pikseli gösterir,Inf
ise sonsuz uzaklıktaki bilinen derinliği gösterir.smoothDepthConfidenceImage
,NULL
veya hem sol hem de sağ görünümler için derinlik güvenilirliği resimlerini yumuşatan işaretçidir.
XrDepthSwapchainImageANDROID, xrCreateDepthSwapchainANDROID çağrılırken XrDepthSwapchainCreateInfoANDROID::resolution ve XrDepthSwapchainCreateInfoANDROID::createFlags bölümünde açıklandığı şekilde ayrılan, okunabilir bir XrDepthSwapchainANDROID'daki derinlik görüntülerini temsil eder. Her derinlik resmi için:
- Resim değerleri, satırlar arasında dolgu olmadan bellekte satır öncelikli sırada düzenlenir.
- İlk değer sol üst, son değer ise sağ alttır.
- İşaretlenen belleğin boyutu, xrEnumerateDepthSwapchainImagesANDROID değerine göre belirlenir ve xrCreateDepthSwapchainANDROID çağrılırken XrDepthSwapchainCreateInfoANDROID::resolution tarafından ayarlanır. Örneğin,
resolution
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID
ise derinlik görüntülerinin boyutu2*160*160*sizeof(float)
olur. - XrDepthSwapchainCreateInfoANDROID::createFlags
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID
değerini ayarlamadıysarawDepthImage
değeriNULL
olmalıdır. - XrDepthSwapchainCreateInfoANDROID::createFlags
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID
değerini ayarlamadıysarawDepthConfidenceImage
değeriNULL
olmalıdır. - XrDepthSwapchainCreateInfoANDROID::createFlags
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID
değerini ayarlamadıysasmoothDepthImage
değeriNULL
olmalıdır. - XrDepthSwapchainCreateInfoANDROID::createFlags
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID
değerini ayarlamadıysasmoothDepthConfidenceImage
değeriNULL
olmalıdır.
Geçerli Kullanım (Dolayı)
- XrDepthSwapchainImageANDROID kullanılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. type
XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden 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 tutamacıdır.acquireInfo
, derinlik görüntüsünün nasıl elde edileceği hakkında bilgi içeren bir XrDepthAcquireInfoANDROID öğesidir.acquireResult
, elde edilen derinlik resmiyle ilgili bilgileri içeren döndürülen XrDepthAcquireResultANDROID nesnesi.
Uygulamalar, mevcut en son takas zinciri resim dizini (ör. XrDepthAcquireResultANDROID::acquiredIndex) elde etmek için xrAcquireDepthSwapchainImagesANDROID işlevini kullanabilir. Bu işlev, xrEnumerateDepthSwapchainImagesANDROID tarafından numaralandırılan XrDepthSwapchainImageANDROID dizisine dizinleri ekler. 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şlevinin bir sonraki çağrısına kadar, görüntü dizisindeki edinilen yerden okumak güvenlidir.
Bir oturumdaki karşılık gelen xrBeginFrame ve xrEndFrame çağrıları arasında en fazla bir xrAcquireDepthSwapchainImagesANDROID çağrısı olmalıdır.
Geçerli Kullanım (Dolayı)
- xrAcquireDepthSwapchainImagesANDROID çağrılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. depthSwapchain
geçerli bir XrDepthSwapchainANDROID olmalıdıracquireInfo
, geçerli bir XrDepthAcquireInfoANDROID yapısının işaretçisi olmalıdır.acquireResult
, XrDepthAcquireResultANDROID yapısına işaret eden bir işaretçi olmalıdır.
İade Kodları
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
XR_ERROR_CALL_ORDER_INVALID
XR_ERROR_LIMIT_REACHED
XR_ERROR_TIME_INVALID
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ının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.space
, XrDepthAcquireResultANDROID::views içinde döndürülen pozun referans çerçevesini tanımlayan bir XrSpace öğesidir.displayTime
, XrDepthAcquireResultANDROID::views içinde döndürülen pozun hesaplanmasında kullanılan süreyi belirten birXrTime
bağımsız değişkenidir. Uygulamalar, mevcut çerçeve için tahmini görüntüleme sürelerini geçmelidir.
Geçerli Kullanım (Dolayı)
- XrDepthAcquireInfoANDROID işlevi kullanılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. type
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.space
geçerli bir XrSpace herkese açık kullanıcı adı 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
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.acquiredIndex
, xrEnumerateDepthSwapchainImagesANDROID tarafından numaralandırılan XrDepthSwapchainImageANDROID dizisindeki edinilen dokunun dizinidir.exposureTimestamp
, derinlik haritasının çekildiği zamanı belirtenXrTime
değeridir.views
, her göz için bir tane olmak üzere iki XrDepthViewANDROID dizisidir. Dizindeki 0, sol göz, 1 ise sağ gözdür.
Geçerli Kullanım (Dolayı)
- XrDepthAcquireResultANDROID kullanılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. type
XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.views
öğelerinin tümü 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
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.fov
, bu görünümü oluşturmak için kullanılan görüş alanını belirten bir XrFovf bağımsız değişkenidir. Görünüm hiçbir zaman yatay veya dikey olarak çevrilmez.pose
, derinlik haritasının oluşturulduğu pozu belirten bir XrPosef bağımsız değişkenidir. Referans çerçevesi XrDepthAcquireInfoANDROID içinde belirtilir.
Geçerli Kullanım (Dolayı)
- XrDepthViewANDROID kullanılmadan önce
XR_ANDROID_depth_texture
uzantısı etkinleştirilmelidir. type
XR_TYPE_DEPTH_VIEW_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden 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 elde edileceği 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
// 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,
.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,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
};
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,
.time = time};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code in this section 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.acquireIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = // value in [0, imageResolution)
int imageX = // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value would be 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 = (tanB + (tanU - tanB)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
Yeni nesne türleri
Yeni Enum Sabitleri
XrObjectType dizini aşağıdakilerle genişletildi:
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
XrResult dizini şu şekilde genişletildi:
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
XrStructureType dizini aşağıdakilerle genişletildi:
XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID
XR_TYPE_DEPTH_VIEW_ANDROID
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID
XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
Yeni Sıralamalar
Yeni Yapılar
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthAcquireInfoANDROID
- XrDepthViewANDROID
- XrDepthAcquireResultANDROID
- XrSystemDepthTrackingPropertiesANDROID
Yeni İşlevler
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthSwapchainImagesANDROID
- xrEnumerateDepthResolutionsANDROID
- xrAcquireDepthSwapchainImagesANDROID
Sayılar
Sürüm Geçmişi
- Düzeltme 1, 09.09.2024 (Levana Chen)
- İlk uzantı açıklaması