Na tej stronie opisano kluczowe zagadnienia, korzystając z kodu w przykładowej aplikacji Hello Sceneform. Uwaga:
W tym przykładzie używane są dane Sceneform i ARCore.
Aby używać funkcji Sceneform bez ARCore, postępuj zgodnie z poniższymi instrukcjami, ignorując wymagania dotyczące zależności ARCore i uprawnienia CAMERA. Użyj
SceneView
w układzie aplikacji zgodnie z opisem w sekcji Tworzenie sceny.Ta przykładowa aplikacja jest napisana jako aplikacja wymagana AR.
Aby dowiedzieć się więcej na temat aplikacji AR opcjonalny i ARWymagane, przeczytaj artykuł Włączanie ARCore.
Aby zacząć korzystać ze Sceneform w swoim projekcie, musisz:
- Importowanie wtyczki Sceneform
- Skonfiguruj pliki projektu
build.gradle
- Zaktualizuj
AndroidManifest.xml
- Przeprowadzanie testów środowiska wykonawczego i tworzenie widoku sceny
- Tworzenie możliwości renderowania
- Tworzenie sceny
Importowanie wtyczki Sceneform do projektu
Po zainstalowaniu wtyczki Sceneform możesz importować, wyświetlać i tworzyć zasoby 3D w aplikacjach Sceneform SDK dla AR w Android Studio. Wymaga Androida Studio w wersji 3.1 lub nowszej.
Aby zainstalować wtyczkę:
W Android Studio otwórz ustawienia wtyczek:
Windows: > Settings > Plugins > Przeglądaj Repositories
macOS: Android Studio > Preferences > Plugins
Kliknij Przeglądaj repozytoria i zainstaluj Narzędzia Google Sceneform (beta).
Skonfiguruj pliki build.gradle
projektu
Upewnij się, że projekt projektu
build.gradle
zawiera repozytorium Google Maven:allprojects { repositories { google() …
Zaktualizuj aplikacje
build.gradle
, aby dodać najnowsze zależności ARCore i Sceneform UX i upewnić się, że ustawienia projektu są zgodne z obiema bibliotekami.android { … defaultConfig { // Sceneform requires minSdkVersion >= 24. minSdkVersion 24 … } // Sceneform libraries use language constructs from Java 8. // Add these compile options if targeting minSdkVersion < 26. compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { … // Provides ARCore Session and related resources. implementation 'com.google.ar:core:1.15.0' // Provides ArFragment, and other UX resources. implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0' // Alternatively, use ArSceneView without the UX dependency. implementation 'com.google.ar.sceneform:core:1.15.0' }
Aktualizowanie elementu AndroidManifest.xml
Zmodyfikuj AndroidManifest.xml
, by wskazać, że aplikacja używa (AR opcjonalny) lub wymaga (wymaganych AR) dostępu do ARCore i CAMERA:
<!-- Both "AR Optional" and "AR Required" apps require CAMERA permission. -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- Sceneform requires OpenGL ES 3.0 or later. -->
<uses-feature android:glEsVersion="0x00030000" android:required="true" />
<!-- Indicates that app requires ARCore ("AR Required"). Ensures the app is
visible only in the Google Play Store on devices that support ARCore.
For "AR Optional" apps remove this line. -->
<uses-feature android:name="android.hardware.camera.ar" />
<application>
…
<!-- Indicates that app requires ARCore ("AR Required"). Causes the Google
Play Store to download and install Google Play Services for AR along
with the app. For an "AR Optional" app, specify "optional" instead of
"required".
-->
<meta-data android:name="com.google.ar.core" android:value="required" />
</application>
Przeprowadzanie testów środowiska wykonawczego i tworzenie widoku sceny
Najprostszym sposobem na rozpoczęcie korzystania ze sceny i tworzenie widoku sceny jest użycie narzędzia ArFragment
, które automatycznie obsługuje zarządzanie sesją ARCore po przeprowadzeniu niezbędnych kontroli środowiska wykonawczego ARCore:
Sprawdza, czy jest zainstalowana zgodna wersja Usług Google Play dla AR, dzięki czemu użytkownik może zainstalować lub zaktualizować ją w razie potrzeby.
Sprawdza, czy aplikacja ma dostęp do aparatu, i prosi użytkownika o pozwolenie, jeśli jeszcze nie otrzymała dostępu.
Jeśli aplikacja potrzebuje dodatkowych uprawnień lub chce dostosować sposób i czas tworzenia sesji AR, możesz:
Utwórz klasę podrzędną
ArFragment
, aby poprosić o dodatkowe uprawnienia.Użyj lub rozwiń
ArSceneView
bezpośrednio. Twoja aplikacja musi wykonać sprawdzanie wersji ARCore i wywołać metodęsetupSession()
, aby ręcznie utworzyć sesję ARCore, jak pokazano w przykładzie Układu Słonecznego.
Po przejściu weryfikacji ArFragment
tworzy:
ArSceneView
dostępne przezgetArSceneView()
, które:Renderuje zdjęcia z aparatu na sesji.
Renderuje wbudowaną animację UX Sceneform, która pokazuje użytkownikom, jak przenieść telefon, aby aktywować AR.
Wyróżnione informacje
Planes
z domyślną wartościąPlaneRenderer
ARCore
Session
, dostępne przezgetSession()
Aby wykorzystać komponent ArFragment
w aplikacji, dodaj go do układu aktywności w postaci przykładowej w sekcji activity_ux.xml
w przykładzie Hello Sceneform:
<fragment android:name="com.google.ar.sceneform.ux.ArFragment"
android:id="@+id/ux_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Tworzenie elementów renderowania
Renderable
to model 3D, który można umieścić w dowolnym miejscu na scenie i składa się z siatek, materiałów i tekstur.
Renderowanie można utworzyć za pomocą:
Standardowe telefony
ViewRenderable
z Androidem są renderowane jako płaskie karty 2D na scenie w 3D, jednocześnie umożliwiając obsługę poprzez dotyk.Pliki zasobów 3D (OBJ, eCPC, glTF) można importować, konwertować i wyświetlać podgląd, korzystając z wtyczki Android Studio. Więcej informacji znajdziesz w artykule o importowaniu i wyświetlaniu podglądu zasobów 3D.
Podstawowe kształty i materiały można łączyć automatycznie, aby tworzyć bardziej skomplikowane obiekty w czasie działania.
Przykładowa aplikacja tworzy renderowany plik z pliku zasobu andy.obj
w 3D. Podczas importowania tego zasobu
wtyczka Sceneformaktualizuje
aplikację&<39;s build.gradle
, aby zastosować tę wtyczkę i dodać sceneform.asset()
w zaimportowanym modelu:
apply plugin: 'com.google.ar.sceneform.plugin'
sceneform.asset('sampledata/models/andy.obj', // 'Source Asset Path' specified during import.
'default', // 'Material Path' specified during import.
'sampledata/models/andy.sfa', // '.sfa Output Path' specified during import.
'src/main/res/raw/andy') // '.sfb Output Path' specified during import.
Zasób res/raw/andy
jest używany do utworzenia elementu ModelRenderable
:
private ModelRenderable andyRenderable;
@Override
protected void onCreate(Bundle savedInstanceState) {
…
ModelRenderable.builder()
.setSource(this, R.raw.andy)
.build()
.thenAccept(renderable -> andyRenderable = renderable)
.exceptionally(
throwable -> {
Log.e(TAG, "Unable to load Renderable.", throwable);
return null;
});
}
Tworzenie sceny
ARSceneView
ma dołączony tag Scene
.
Scena to przypominająca drzewa struktura danych, która zawiera obiekty Node
, które są renderowane.
Tutaj można zobaczyć stan Andy i dołączyć go bezpośrednio do węzła głównego Scene:
Node node = new Node();
node.setParent(arFragment.getArSceneView().getScene());
node.setRenderable(andyRenderable);
Każdy węzeł zawiera wszystkie informacje potrzebne do renderowania Sceneform (w tym pozycję, orientację i obiekt renderowany), a także wchodzi w interakcje z nim (w tym kształt kolizji i detektory zdarzeń).
Węzły można dodawać do innych węzłów, tworząc relację nadrzędna-podrzędna. Gdy węzeł jest podrzędny wobec innego węzła, porusza się, obraca i skaluje razem z nadrzędnym elementem, np. jak ramiona poruszają się, gdy ciało porusza się. Węzeł może mieć wiele elementów podrzędnych, ale tylko jeden element nadrzędny i w ten sposób tworzyć strukturę przypominającą drzewo. Struktura ta nosi nazwę wykresu sceny.
Każda scena renderuje wykres scenowy z punktu widzenia kamery (obsługiwane przez śledzenie ruchu w ARCore). Aplikacja może wchodzić w interakcję ze sceną, nasłuchując zdarzeń dotyku i gestów, wykonując testy działań na węzłach i umieszczając kotwice. Więcej informacji znajdziesz w artykule Kompilowanie i interakcja ze sceną.