با ARCore برای Jetpack XR، اطلاعات عمق را در برنامه‌تان بازیابی کنید

دستگاه‌های XR قابل‌اعمال
این راهنمایی به شما کمک می‌کند برای این نوع دستگاه‌های واقعیت گسترده تجربه بسازید.
هدست‌های واقعیت گسترده
عینک واقعیت گسترده سیمی

برنامه شما می‌تواند ازطریق ARCore برای Jetpack XR اطلاعات عمق را بازیابی کند تا مشخص کند اشیای فیزیکی چقدر به دستگاه نزدیک هستند.

ایجاد جلسه ARCore برای Jetpack XR

ازطریق ARCore برای Jetpack XR Session اطلاعات عمق را دریافت کنید. اگر بااستفاده از Jetpack Compose برای واقعیت گسترده درحال بهبود میانای کاربر فضایی هستید، از Jetpack Compose برای واقعیت گسترده به جلسه دسترسی پیدا کنید. اگر با نهادهای فضایی‌سازی‌شده از کتابخانه Jetpack SceneCore کار می‌کنید، از Jetpack XR Runtime به جلسه دسترسی پیدا کنید.

پیکربندی جلسه

بازیابی نقشه عمق به‌طور پیش‌فرض در جلسات XR فعال نیست. برای فعال کردن بازیابی نقشه عمق، جلسه را پیکربندی کنید و DepthEstimationMode را تنظیم کنید:

val newConfig = Config.Builder(session.config)
    .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY)
    .build()
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

مقادیر زیر برای DepthEstimationMode دردسترس است:

  • DISABLED: هیچ اطلاعاتی درباره عمق صحنه ارائه نشده است.
  • ‫RAW_ONLY: تخمین عمق با مقادیر عمق خام و اطمینان فعال است.
  • ‫SMOOTH_ONLY: تخمین عمق با عمق صاف و مقادیر اطمینان فعال است.
  • ‫SMOOTH_AND_RAW: تخمین عمق با مقادیر عمق خام و هموار و مقادیر اطمینان فعال است.

نقشه‌های عمق خام تخمین‌های عمق را با دقت بیشتری ارائه می‌دهند، اما تصاویر عمق خام ممکن است تخمین‌های عمق را برای همه پیکسل‌های تصویر دوربین ارائه ندهند. درمقابل، نقشه‌های عمق صاف برای هر پیکسل عمق تخمینی ارائه می‌دهند، اما داده‌های عمق هر پیکسل ممکن است به‌دلیل صاف کردن و میان‌یابی تخمین‌های عمق دقت کمتری داشته باشند.

بررسی قابلیت‌های نقشه عمق

دستگاه‌های مختلف قابلیت‌های متفاوتی دارند. دستگاه‌های دارای پیکربندی دوربین استریو ممکن است نقشه‌های تخمین عمق برای دوربین‌های چپ و راست ارائه دهند. به‌همین ترتیب، دستگاه‌های دارای دوربین تکی فقط می‌توانند نقشه‌های تخمین عمق را برای دوربین تک‌چشمی ارائه دهند.

برای بررسی اینکه دستگاه از کدام نقشه‌های عمق پشتیبانی می‌کند، از XrDevice.isRenderingModeSupported استفاده کنید:

val xrDevice = XrDevice.getCurrentDevice(context)
val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO)
val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)

بازیابی داده‌های عمق

برای دریافت داده‌های عمق برای دوربین موردنظر، از DepthMap استفاده کنید:

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

محاسبه مقادیر عمق

می‌توانید مقادیر عمق و اطمینان را از نقشه عمق حاصل دریافت کنید:

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

بسته به تنظیم پیکربندی استفاده‌شده، بااستفاده از smoothDepthMap یا rawDepthMap به نقشه عمق مربوطه دسترسی پیدا کنید. اندازه‌گیری‌های موجود در این نقشه‌ها به‌صورت متر بیان شده است. همچنین می‌توانید بااستفاده از smoothConfidenceMap و rawConfidenceMap به مقادیر اطمینان دسترسی پیدا کنید. این مقادیر از ۰ تا ۲۵۵ متغیر است، که ۲۵۵ نشان‌دهنده بالاترین سطح اطمینان است.

برای ارائه نقشه عمق برای اهداف اشکال‌زدایی یا دیداری‌سازی، به بخش «عمق» برنامه آزمایشی ARCore مراجعه کنید.