1. قبل از شروع
ARCore چارچوب گوگل برای ایجاد تجربیات واقعیت افزوده (AR) در گوشی های هوشمند است. Geospatial Streetscape Geometry و API های لنگر پشت بام به تجربیات AR شما کمک می کند تا ساختمان های اطراف کاربرانتان را درک کند.
در این کد لبه، شما یک برنامه واقعیت افزوده میسازید که هندسه منظره خیابان را در منطقه شما تجسم میکند و به شما امکان میدهد کنارههای آن را تزئین کنید. سپس از لنگرهای پشت بام برای افزودن دکوراسیون به بالای پشت بام های اطراف خود استفاده می کنید.

پیش نیازها
- دانش اولیه AR
- دانش اولیه ARCore Geospatial API
چیزی که یاد خواهید گرفت
- نحوه راه اندازی یک پروژه Google Cloud که می تواند از ARCore Geospatial API استفاده کند.
- نحوه بدست آوردن هندسه نمای خیابان از Geospatial API.
- نحوه تجسم ساختمان ها و زمین های به دست آمده از هندسه منظره خیابان.
- نحوه انجام محاسبات پایه بر روی چند ضلعی های به دست آمده.
- نحوه انجام تست ضربه بر روی هندسه.
- چگونه از لنگرهای پشت بام برای چسباندن محتوا به بالای ساختمان ها استفاده کنیم.
آنچه شما نیاز دارید
- یک دستگاه Android ARCore پشتیبانی شده که با یک کابل USB به دستگاه توسعه شما متصل شده و با اشکالزدایی USB پیکربندی شده است.
- خدمات Google Play برای AR 1.37 یا بالاتر روی دستگاه توسعه Android نصب شده است.
- Android Studio برای ساخت برنامه های اندروید نصب و پیکربندی شده است.
2. محیط خود را تنظیم کنید
برای استفاده از Geospatial API با Kotlin و Android Studio، به یک پروژه Google Cloud و پروژه شروع ما نیاز دارید.
یک پروژه Google Cloud راه اندازی کنید
ARCore Geospatial API به Google Cloud متصل می شود تا اطلاعات محلی سازی را از سیستم موقعیت یابی بصری (VPS) Google در مناطق تحت پوشش نمای خیابان Google ارائه دهد.
برای استفاده از این سرور در پروژه خود، مراحل زیر را دنبال کنید:
- یک پروژه در Google Cloud ایجاد کنید.

- در قسمت نام پروژه ، یک نام مناسب مانند
ARCore Geospatial API projectوارد کنید و هر مکانی را انتخاب کنید. - روی ایجاد کلیک کنید.
- در کنسول Google Cloud در صفحه انتخابگر پروژه، روی ایجاد پروژه کلیک کنید.
- برای مشاهده ARCore API برای این پروژه روی لینک زیر کلیک کنید و روی Enable کلیک کنید:
- یک کلید API برای پروژه خود ایجاد کنید:
- در بخش APIs & services ، اعتبارنامه ها را انتخاب کنید.
- روی Create credentials کلیک کنید و کلید API را انتخاب کنید.
- به کلید توجه کنید زیرا بعداً به آن نیاز دارید.
شما یک پروژه Google Cloud با مجوز کلید API ایجاد کردید و آماده استفاده از Geospatial API در پروژه نمونه هستید.
Android Studio را راه اندازی کنید
برای شروع با Geospatial API، ما یک پروژه آغازین ارائه کردیم که شامل اصول اولیه یک پروژه ARCore یکپارچه با Geospatial API است.
برای راه اندازی اندروید استودیو مراحل زیر را دنبال کنید:
- Android Studio را باز کنید و یکی از موارد زیر را انجام دهید:
- اگر قبلاً پروژه ای باز دارید، روی File > New > Project from version control کلیک کنید.
- اگر پنجره خوش آمدید به Android Studio را مشاهده کردید، روی دریافت از VCS کلیک کنید.

- Git را انتخاب کنید و
https://github.com/google-ar/codelab-streetscape-geometry-rooftop-anchors.gitرا وارد کنید تا پروژه وارد شود.
کلید API را با پروژه Android Studio یکپارچه کنید
برای مرتبط کردن کلید API از Google Cloud با پروژه خود، این مراحل را دنبال کنید:
- در Android Studio، روی app > src کلیک کنید و روی
AndroidManifest.xmlدوبار کلیک کنید. - ورودی های
meta-dataزیر را بیابید:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" /> - جای جای
API_KEYرا با کلید API که در پروژه Google Cloud خود ایجاد کردید جایگزین کنید. مقدار ذخیره شده درcom.google.android.ar.API_KEYبه این برنامه اجازه استفاده از Geospatial API را می دهد.
پروژه خود را تایید کنید
- برای تأیید پروژه خود، برنامه خود را در دستگاه توسعه خود اجرا کنید. شما باید نمای دوربین و اطلاعات اشکال زدایی جغرافیایی را در بالای صفحه ببینید. همچنین باید دکمه ها و کنترل هایی را مشاهده کنید که به نظر می رسد هیچ عملکردی ندارند. شما این قابلیت را در پروژه خود در سراسر این نرم افزار کد برنامه ریزی می کنید.

3. دادههای هندسه نمای خیابان را تجسم کنید
پس از اینکه تأیید کردید که Geospatial API روی دستگاه شما کار می کند، هندسه نمای خیابان را از Geospatial API بدست می آورید.
هندسه نمای خیابان را فعال کنید
- در فایل
StreetscapeGeometryActivity.ktخط زیر را پیدا کنید:// TODO: Enable Streetscape Geometry. - بعد از این خط، حالت streetscape-geometry را فعال کنید:
وقتی Geospatial API و حالت streetscape-geometry فعال هستند، برنامه شما میتواند اطلاعات مربوط به هندسه نمای خیابان را در اطراف کاربر دریافت کند.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
هندسه منظره خیابان را بدست آورید
- در فایل
StreetscapeGeometryActivity.ktخط زیر را پیدا کنید:// TODO: Obtain Streetscape Geometry. - بعد از این خط، هندسه Streetscape را با گرفتن تمام اشیاء
Trackableو فیلتر کردن توسطStreetscapeGeometryبدست آورید: شما از این هندسه ها در تجسم ساده ای که در پروژه نمونه ارائه شده است استفاده می کنید. این تجسم هر چند ضلعی ساختمان یا زمین را به رنگی متفاوت نشان می دهد.val streetscapeGeometry = session.getAllTrackables(StreetscapeGeometry::class.java) - در خط بعدی کد زیر را اضافه کنید:
streetscapeGeometryRenderer.render(render, streetscapeGeometry) - برنامه خود را اجرا کنید و از ساختمانی در منطقه خود بازدید کنید.
- پس از تکمیل محلی سازی Geospatial، روی ضربه بزنید
تنظیمات و فعال کردن تجسم هندسه خیابان. - به یک ساختمان در AR نگاه کنید. هر ساختمان بخشبندی شده رنگ خاص خود را دارد و شمارههای
QualityوTypeهندسه مرکزی نمایش داده میشوند.

4. یک تست آماری با دادههای هندسه نمای خیابان انجام دهید
اکنون که می توانید هندسه منظره خیابان را ببینید، می توانید از تست ضربه برای تزئین ساختمان استفاده کنید. تست ضربه تقاطع بین هندسه مجازی و پرتو را پیدا می کند. برای یافتن هندسه ای که کاربر روی آن ضربه می زند، از تست ضربه استفاده می کنید.
تست ضربه را انجام دهید
در این قسمت زمانی که کاربر بر روی هندسه آن ضربه می زند ستاره ای را در نمای ساختمان قرار می دهید. شما این کار را با یک تست ضربه از دیدگاه کاربر در جهان انجام می دهید و ثبت می کنید که در هنگام خروج با کدام اشیاء AR مواجه می شود. سپس از این اطلاعات برای بررسی اینکه آیا کاربر از چند ضلعی ساختمان ضربه زده است یا خیر استفاده می کنید.
- در فایل
StreetscapeCodelabRenderer.ktخط زیر را پیدا کنید:// TODO: determine the Streetscape Geometry at the center of the viewport - بعد از این خط کد زیر را اضافه کنید:
این کد از مختصات مرکز برای یافتن هندسه منظره خیابانی که یک ساختمان است استفاده می کند. شما از این نتیجه برای افزودن تزئینات استفاده می کنید.val centerHits = frame.hitTest(centerCoords[0], centerCoords[1]) val hit = centerHits.firstOrNull { val trackable = it.trackable trackable is StreetscapeGeometry && trackable.type == StreetscapeGeometry.Type.BUILDING } ?: return
با یک ضربه، یک دکوراسیون ستاره اضافه کنید
- در فایل
StreetscapeCodelabRenderer.ktخط زیر را پیدا کنید:// TODO: Create an anchor for a star, and add it to the starAnchors object. - بعد از این خط کد زیر را اضافه کنید:
کلاسval transformedPose = ObjectPlacementHelper.createStarPose(hit.hitPose) val anchor = hit.trackable.createAnchor(transformedPose) starAnchors.add(anchor)ObjectPlacementHelperمکان مناسبی را برای قرار دادن ستاره شما با نگاه کردن به حالت ضربه تعیین می کند. شیstarAnchorsبرای نمایش ستاره ها در نمای AR استفاده می شود.
آن را امتحان کنید
- برنامه خود را اجرا کنید و از ساختمانی در منطقه خود بازدید کنید.
- پس از تکمیل مکان یابی مکانی، دوربین خود را به سمت ساختمان گرفته و روی صفحه ضربه بزنید. شما می بینید که یک ستاره روی ساختمان در مرکز صفحه ظاهر می شود.

5. از داده های پشت بام لنگر استفاده کنید
در نهایت، از لنگرهای پشت بام برای افزودن تزئینات به بالای ساختمان استفاده می کنید. لنگرهای پشت بام به شما کمک می کنند لنگرهای AR را به بالای ساختمان ها با طول و عرض جغرافیایی بچسبانید. شما از این لنگرها برای اتصال بالن به ساختمان های اطراف کاربر استفاده می کنید.
رفتارها را به حالت بالون اضافه کنید
این پروژه دارای دو حالت قرار دادن دارایی است: حالت آفتابگردان که قبلاً استفاده کرده اید و حالت بالون.
برای برنامه ریزی رفتار برای حالت بالون، این مراحل را دنبال کنید:
- در فایل
StreetscapeCodelabRenderer.ktخط زیر را پیدا کنید:// TODO: Create an anchor for a balloon and add it to the balloonAnchors object. - از ژست ضربه برای ایجاد یک نقطه عالی برای بادکنک خود استفاده کنید:
val transformedPose = ObjectPlacementHelper.createBalloonPose(frame.camera.pose, hit.hitPose) - متغیر
transformedPoseبه موقعیت جغرافیایی تبدیل کنید:val earth = session?.earth ?: return val geospatialPose = earth.getGeospatialPose(transformedPose) - یک لنگر روی پشت بام با طول و عرض جغرافیایی تغییر یافته ایجاد کنید:
earth.resolveAnchorOnRooftopAsync( geospatialPose.latitude, geospatialPose.longitude, 0.0, transformedPose.qx(), transformedPose.qy(), transformedPose.qz(), transformedPose.qw() ) { anchor, state -> if (!state.isError) { balloonAnchors.add(anchor) } }
آن را امتحان کنید
- برنامه خود را اجرا کنید و از ساختمانی در منطقه خود بازدید کنید.
- پس از تکمیل مکان یابی جغرافیایی، به حالت بالون تغییر دهید و روی یک ساختمان ضربه بزنید. می بینید که یک بالن در بالای ساختمان ظاهر می شود.

6. نتیجه گیری
تبریک می گویم! شما یک برنامه واقعیت افزوده ساخته اید که هندسه منظره خیابان را در منطقه شما تجسم می کند و به شما امکان می دهد کناره های آن را با ستاره تزئین کنید. شما همچنین از لنگرهای پشت بام برای اضافه کردن یک بالون به بالای پشت بام های اطراف خود استفاده کردید.
