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

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

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

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

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

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

بازیابی نقشه عمق به‌طور پیش‌فرض در جلسه‌های «واقعیت گسترده» فعال نیست. برای فعال کردن بازیابی نقشه عمق، جلسه را پیکربندی کنید و 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)

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

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

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

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

می‌توانید مقادیر عمق و اطمینان را از نقشه عمق حاصل به‌دست آورید:

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

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

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