名前の文字列
XR_ANDROID_depth_texture
拡張機能の種類
インスタンスの拡張
登録されている電話番号
703
リビジョン
1
拡張機能とバージョンの依存関係
最終更新日
2024-09-11
IP ステータス
既知の IP に関する申し立てはありません。
投稿者
Sushant Kulkarni、Google
Cairn Overturf、Google
Spencer Quin、Google
Levana Chen、Google
概要
この拡張機能により、アプリケーションはヘッドセットの周囲の現実環境の深度マップをリクエストし、作成時にサポートされている深度解像度をクエリできます。
この拡張機能は、オクルージョン、ヒットテスト、その他の正確なシーン ジオメトリを使用する特定のタスク(偽造顔検出など)に、元の深度とスムーズな深度を公開することを目的としています。
システムの機能を確認する
XrSystemDepthTrackingPropertiesANDROID 構造は次のように定義されます。
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
const void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。supportsDepthTracking
は、現在のシステムがデプス トラッキングをサポートしているかどうかを示すXrBool32
です。
アプリは、xrGetSystemProperties を呼び出すときに XrSystemProperties を XrSystemDepthTrackingPropertiesANDROID 構造で拡張することで、システムがデプス トラッキングに対応しているかどうかを検査できます。
有効な使用方法(暗黙的)
- XrSystemDepthTrackingPropertiesANDROID を使用する前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 type
はXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。
クエリの深さの解決策
xrEnumerateDepthResolutionsANDROID 関数は次のように定義されます。
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
パラメータの説明
session
は、サポートされている深度解像度を列挙する XrSession です。resolutionCapacityInput
はresolutions
の容量です。必要な容量を取得するには 0 にします。resolutionCountOutput
は、書き込まれたuint64_t
resolutions
の数へのポインタ、またはresolutionCapacityInput
が不十分な場合に必要な容量へのポインタです。resolutions
は XrDepthCameraResolutionANDROID の配列へのポインタですが、resolutionCapacityInput
が 0 の場合、NULL
にすることができます。- 必要な
resolutions
サイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
xrEnumerateDepthResolutionsANDROID は、現在のセッションでサポートされている深度解像度を列挙します。深度解像度は、ランタイムの優先度の高い順に並べ替える必要があります。アプリケーションは、パフォーマンスと品質を最適化するために、サポートされている最高の設定を使用する必要があります。
有効な使用方法(暗黙的)
- xrEnumerateDepthResolutionsANDROID を呼び出す前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 session
は有効な XrSession ハンドルである必要があります。resolutionCountOutput
はuint32_t
値へのポインタである必要があります。resolutionCapacityInput
が 0 でない場合、resolutions
はresolutionCapacityInput
XrDepthCameraResolutionANDROID 値の配列へのポインタである必要があります。
戻りコード
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 列挙型は、XrDepthSwapchainANDROID の作成時にサポートされる深度解像度を表します。
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;
列挙値の説明
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID
- 深度画像と信頼性画像の解像度は 80×80 です。XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID
- 深度画像と信頼度画像の解像度は 160x160 です。XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID
- 深度画像と信頼性の画像の解像度は 320x320 です。
深度スワップチェーンを作成する
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID は深度スワップチェーン ハンドルです。
xrCreateDepthSwapchainANDROID 関数は次のように定義されます。
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
パラメータの説明
session
は、深度スワップチェーンを作成する XrSession です。createInfo
は、スワップチェーンの作成に使用されるパラメータを含む XrDepthSwapchainCreateInfoANDROID 構造体へのポインタです。swapchain
は、作成された XrDepthSwapchainANDROID が返されるハンドルへのポインタです。
アプリケーションは、xrCreateDepthSwapchainANDROID 関数を使用して、深度と信頼度の両方の画像を管理する深度スワップチェーンを作成できます。
返された深度スワップチェーン ハンドルは、後で API 呼び出しで使用される可能性があります。XrDepthSwapchainANDROID ハンドルは、最終的には xrDestroyDepthSwapchainANDROID 関数を使用して解放する必要があります。
有効な使用方法(暗黙的)
- xrCreateDepthSwapchainANDROID を呼び出す前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 session
は有効な XrSession ハンドルである必要があります。createInfo
は、有効な XrDepthSwapchainCreateInfoANDROID 構造体へのポインタである必要があります。swapchain
は XrDepthSwapchainANDROID ハンドルへのポインタである必要があります。
戻りコード
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 構造は次のように定義されます。
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。resolution
は、深度と信頼のテクスチャを作成する XrDepthCameraResolutionANDROID です。createFlags
は 1 つ以上の XrDepthSwapchainCreateFlagsANDROID です。
XrDepthSwapchainCreateInfoANDROID 構造体は、xrCreateDepthSwapchainANDROID に渡されたときに XrDepthSwapchainANDROID の作成オプションを提供します。
有効な使用方法(暗黙的)
- XrDepthSwapchainCreateInfoANDROID を使用する前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 type
はXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。resolution
は有効な XrDepthCameraResolutionANDROID 値である必要があります。createFlags
は、XrDepthSwapchainCreateFlagBitsANDROID 値の有効な組み合わせである必要があります。createFlags
は 0 にできない
XrDepthSwapchainCreateFlagsANDROID には、XrDepthSwapchainANDROID の作成オプションを指定します。
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
XrDepthSwapchainCreateFlagsANDROID の有効なビットは、XrDepthSwapchainCreateFlagBitsANDROID で定義されます。これは次のように指定されます。
// 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 関数は次のように定義されます。
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
パラメータの説明
swapchain
は、xrCreateDepthSwapchainANDROID
によって以前に作成された XrDepthSwapchainANDROID ハンドルです。
xrDestroyDepthSwapchainANDROID 関数は、デプス スワップチェーンを破棄します。
有効な使用方法(暗黙的)
- xrDestroyDepthSwapchainANDROID を呼び出す前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 swapchain
は有効な XrDepthSwapchainANDROID ハンドルである必要があります。
スレッドセーフ
swapchain
と子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
深度テクスチャにアクセスする
xrEnumerateDepthSwapchainImagesANDROID 関数は次のように定義されます。
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
パラメータの説明
depthSwapchain
は、画像を取得する XrDepthSwapchainANDROID です。depthImageCapacityInput
はdepthImages
配列の容量です。必要な容量を取得するリクエストを示すには 0 にします。depthImageCountOutput
は、書き込まれたdepthImages
の数へのポインタ、またはdepthImageCapacityInput
が不十分な場合に必要な容量へのポインタです。depthImages
は、XrDepthSwapchainImageANDROID 構造の配列へのポインタです。depthImageCapacityInput
が 0 の場合、NULL
にできます。- 必要な
depthImages
サイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
xrEnumerateDepthSwapchainImagesANDROID は、XrDepthSwapchainImageANDROID 構造の配列を入力します。リソースは一定で、XrDepthSwapchainANDROID の存続期間中有効です。この関数は xrEnumerateSwapchainImages と同様に動作します。
有効な使用方法(暗黙的)
- xrEnumerateDepthSwapchainImagesANDROID を呼び出す前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 depthSwapchain
は有効な XrDepthSwapchainANDROID ハンドルである必要があります。depthImageCountOutput
はuint32_t
値へのポインタである必要があります。depthImageCapacityInput
が 0 でない場合、depthImages
はdepthImageCapacityInput
XrDepthSwapchainImageANDROID 構造体の配列へのポインタである必要があります。
戻りコード
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 構造体は次のように定義されます。
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。rawDepthImage
はNULL
または、左側と右側の両方のビューの未加工の深度画像へのポインタです。値の単位はメートルです。特別な値:0.0
は、元の深度で無効または空の深度ピクセルを示します。Inf
は、事実上無限に遠くにある既知の深度を示します。rawDepthConfidenceImage
はNULL
または、左側と右側の両方のビューの未加工の深度信頼性画像へのポインタです。smoothDepthImage
はNULL
で、左側と右側の両方のビューの深度画像をスムーズにするポインタです。値の単位はメートルです。特別な値:0.0
は、スムーズな深度で無効または空の深度ピクセルを示します。Inf
は、事実上無限に遠くにある既知の深度を示します。smoothDepthConfidenceImage
はNULL
または、左側と右側の両方のビューの深度信頼性画像をスムーズにするポインタです。
XrDepthSwapchainImageANDROID は、読み取り可能な XrDepthSwapchainANDROID の奥行き画像を表します。この画像は、xrCreateDepthSwapchainANDROID の呼び出し時に XrDepthSwapchainCreateInfoANDROID::resolution と XrDepthSwapchainCreateInfoANDROID::createFlags で説明されているように割り振られます。深度画像ごとに:
- 画像値は行優先の順序でメモリに配置され、行間にパディングはありません。
- 最初の値は左上、最後の値は右下です。
- ポインタが指すメモリのサイズは、xrEnumerateDepthSwapchainImagesANDROID の値によって決まり、xrCreateDepthSwapchainANDROID の呼び出し時に XrDepthSwapchainCreateInfoANDROID::resolution によって設定されます。たとえば、
resolution
がXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID
の場合、深度画像のサイズは2*160*160*sizeof(float)
になります。 - XrDepthSwapchainCreateInfoANDROID::createFlags で
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID
が設定されていない場合、rawDepthImage
の値はNULL
にする必要があります。 - XrDepthSwapchainCreateInfoANDROID::createFlags で
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID
が設定されていない場合、rawDepthConfidenceImage
の値はNULL
にする必要があります。 - XrDepthSwapchainCreateInfoANDROID::createFlags で
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID
が設定されていない場合、smoothDepthImage
の値はNULL
にする必要があります。 - XrDepthSwapchainCreateInfoANDROID::createFlags で
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID
が設定されていない場合、smoothDepthConfidenceImage
の値はNULL
にする必要があります。
有効な使用方法(暗黙的)
- XrDepthSwapchainImageANDROID を使用する前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 type
はXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。
xrAcquireDepthSwapchainImagesANDROID 関数は次のように定義されます。
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
パラメータの説明
depthSwapchain
は、深度画像の XrDepthSwapchainANDROID ハンドルです。acquireInfo
は、深度画像の取得方法に関する情報を含む XrDepthAcquireInfoANDROID です。acquireResult
は、取得された深度画像に関する情報が含まれる XrDepthAcquireResultANDROID です。
アプリケーションは、xrAcquireDepthSwapchainImagesANDROID 関数を使用して、XrDepthAcquireResultANDROID::acquiredIndex などの利用可能な最新の swapchain イメージ インデックスを取得し、xrEnumerateDepthSwapchainImagesANDROID によって列挙される XrDepthSwapchainImageANDROID 配列に格納できます。返される XrDepthAcquireResultANDROID には、深度データを解釈するために必要な視野やポーズなどの他の情報も含まれています。xrAcquireDepthSwapchainImagesANDROID の次回の呼び出しまで、画像配列内の取得済みスロットから読み取ることは安全です。
セッション内の対応する xrBeginFrame 呼び出しと xrEndFrame 呼び出しのペアの間に、xrAcquireDepthSwapchainImagesANDROID の呼び出しは 1 回だけする必要があります。
有効な使用方法(暗黙的)
- xrAcquireDepthSwapchainImagesANDROID を呼び出す前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 depthSwapchain
は有効な XrDepthSwapchainANDROID ハンドルである必要があります。acquireInfo
は、有効な XrDepthAcquireInfoANDROID 構造体へのポインタである必要があります。acquireResult
は XrDepthAcquireResultANDROID 構造体へのポインタである必要があります。
戻りコード
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 構造体は次のように定義されます。
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。space
は、XrDepthAcquireResultANDROID::views で返されたポーズの参照フレームを定義する XrSpace です。displayTime
は、XrDepthAcquireResultANDROID::views で返されたポーズのポーズを計算するために使用された時間を指定するXrTime
です。アプリは、現在のフレームの予測表示時間を渡す必要があります。
有効な使用方法(暗黙的)
- XrDepthAcquireInfoANDROID を使用する前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 type
はXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。space
は有効な XrSpace ハンドルである必要があります。
XrDepthAcquireResultANDROID 構造体は次のように定義されます。
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。acquiredIndex
は、xrEnumerateDepthSwapchainImagesANDROID によって列挙される XrDepthSwapchainImageANDROID 配列への取得済みテクスチャのインデックスです。exposureTimestamp
は、深度マップがキャプチャされた時刻を指定するXrTime
です。views
は、左右の眼に 1 つずつ、2 つの XrDepthViewANDROID の配列です。インデックス 0 は左眼、インデックス 1 は右眼です。
有効な使用方法(暗黙的)
- XrDepthAcquireResultANDROID を使用する前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 type
はXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。views
の任意の要素は、有効な XrDepthViewANDROID 構造である必要があります。
XrDepthViewANDROID 構造体は次のように定義されます。
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。fov
は、このビューの生成に使用される画角を指定する XrFovf です。ビューが水平方向または垂直方向に反転されることはありません。pose
は、深度マップがレンダリングされたポーズを指定する XrPosef です。参照フレームは XrDepthAcquireInfoANDROID で指定されます。
有効な使用方法(暗黙的)
- XrDepthViewANDROID を使用する前に、
XR_ANDROID_depth_texture
拡張機能を有効にする必要があります。 type
はXR_TYPE_DEPTH_VIEW_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。
デプス トラッキングのサンプルコード
次のサンプルコードは、深度画像を取得する方法を示しています。
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
// ...
}
新しいオブジェクト タイプ
新しい列挙型定数
XrObjectType 列挙型が拡張され、次のように変更されました。
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
XrResult 列挙型が拡張され、次が追加されました。
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
XrStructureType 列挙型が拡張され、次のように変更されました。
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
新しい列挙型
新しい構造
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthAcquireInfoANDROID
- XrDepthViewANDROID
- XrDepthAcquireResultANDROID
- XrSystemDepthTrackingPropertiesANDROID
新しい関数
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthSwapchainImagesANDROID
- xrEnumerateDepthResolutionsANDROID
- xrAcquireDepthSwapchainImagesANDROID
問題
変更履歴
- リビジョン 1、2024 年 9 月 9 日(Levana Chen)
- 最初の拡張機能の説明