diff --git a/src/chapter3.2.md b/src/chapter3.2.md index d6d83ea..d149746 100644 --- a/src/chapter3.2.md +++ b/src/chapter3.2.md @@ -4,7 +4,7 @@ Nella seconda applicazione d'esempio viene mostrato come sia possibile recuperar Questa funzione risulta particolarmente utile quando si deve rilasciare un'applicazione che sfrutta numerosi modelli e non si vuole appesantire eccessivamente il volume del file *APK*. Inoltre concede maggiore libertà allo sviluppatore in quanto è possibile aggiungere nuovi modelli, o aggiornare quelli vecchi, senza dover operare sull'applicazione, ma lavorando esclusivamente lato server. -In questo caso specifico l'applicazione dovrà riconosce uno o più piani e in seguito ad un tocco dell'utente su di essi, mostrare un modello di *Andy*, la mascotte di Android. +In questo caso specifico l'applicazione dovrà riconosce uno o più piani e in seguito ad un tocco dell'utente su di essi, mostrare un modello di *Andy*, la mascotte di Android(vedi fig. \ref{rfm}). Per quest'applicazione oltre alle configurazioni già viste in precedenza è necessario aggiungere una nuova dipendenza che include le funzioni necessarie per il fetching del modello. @@ -98,4 +98,6 @@ fun buildRenderable( Infine l'aggiunta del modello renderizzato alla scena avviene mediante la medesima funzione `addTransformableNodeToScene` vista in precedenza. +![Rendering di un modello recuperato a runtime](figures/rfm.png){#rfm width=225px height=400px} + [^sceneform-1.6]: Sceneform 1.6.0. diff --git a/src/chapter3.3.md b/src/chapter3.3.md index 5477485..e391fba 100644 --- a/src/chapter3.3.md +++ b/src/chapter3.3.md @@ -7,9 +7,11 @@ L'SDK di Sceneform fornisce due classi per adempiere a questo compito: - `MaterialFactory`: consente di creare un *"materiale"*, partendo o da un colore o da una texture[^texture] definita precedentemente. - `MaterialShape`: consente di creare delle semplici forme geometriche come cilindri, sfere e cuboidi. -Nel caso specifico è stata realizzata un'applicazione che in seguito al tocco dell'utente renderizza nella scena un oggetto dalla forma e dal colore *pseudo-casuali*. +Nel caso specifico è stata realizzata un'applicazione che in seguito al tocco dell'utente renderizza nella scena un oggetto dalla forma e dal colore *pseudo-casuali*(vedi fig. \ref{rbm}). Inoltre è stato aggiunto un ulteriore elemento di interazione con l'utente, che gli consente di cliccare sull'oggetto renderizzato, al fine di cambiare la tinta di quest'ultimo. +![Rendering di modelli costruiti a runtime](figures/rbm.png){#rbm width=225px height=400px} + ### Interazione con l'utente Anche in questo caso l'interazione con l'utente è gestita mediante il metodo `setOnTapArPlaneListener`. diff --git a/src/chapter3.4.md b/src/chapter3.4.md index d0f2fbb..6df73ac 100644 --- a/src/chapter3.4.md +++ b/src/chapter3.4.md @@ -3,7 +3,9 @@ Quando si ha a che fare con più nodi presenti sulla scena può risultare utile verificare se due o più di questi si sovrappongono. In questo progetto viene mostrato come eseguire questo controllo mediante l'API di ARCore. -Per questo progetto si è utilizzata una rivisitazione dell'applicazione vista nel progetto precedente, con la differenza che l'aggiunta di un oggetto non è consentita se questo va in collisione con un altro già presente nella scena. +Per questo progetto si è utilizzata una rivisitazione dell'applicazione vista nel progetto precedente, con la differenza che l'aggiunta di un oggetto non è consentita se questo va in collisione con un altro già presente nella scena(vedi fig. \ref{c}). + +![Schermata di errore dovuta ad una collisione](figures/c.png){#c width=225px height=400px} ### Rilevamento della collisione diff --git a/src/chapter3.5.1.md b/src/chapter3.5.1.md index c8161c2..136d9e8 100644 --- a/src/chapter3.5.1.md +++ b/src/chapter3.5.1.md @@ -5,7 +5,9 @@ Anche in questo caso Sceneform non ci fornisce un supporto diretto, ma a differe L'`ObjectAnimator` non è una classe specifica di ARCore o Sceneform, ma dell'SDK di Android che può essere usata per gestire facilmente animazioni e transizioni all'interno delle applicazioni Android. Grazie a questa classe e una serie di punti nello spazio, *collegati* tramite un interpolatore, saremo in grado di conferire il movimento ai nostri modelli. -Per mostrare il funzionamento degli animator è stato realizzato un progetto d'esempio in grado di renderizzare un modello del sistema solare in cui i pianeti realizzano sia il modo di rotazione su se stessi, sia quello di rivoluzione intorno al sole. +Per mostrare il funzionamento degli animator è stato realizzato un progetto d'esempio in grado di renderizzare un modello del sistema solare in cui i pianeti realizzano sia il modo di rotazione su se stessi, sia quello di rivoluzione intorno al sole(vedi fig. \ref{ss}). + +![Rendering del sistema solare](figures/ss.png){#ss width=400px height=225px} #### Recupero e rendering dei modelli diff --git a/src/chapter3.6.md b/src/chapter3.6.md index 50aa472..fc73208 100644 --- a/src/chapter3.6.md +++ b/src/chapter3.6.md @@ -1,10 +1,14 @@ ## Cloud anchors Un'ulteriore funzionalità messa a disposizione da ARCore sono le *Cloud Anchors* che ci permette di salvare su un server remoto le ancore a cui sono agganciati i nodi. -Grazie a questa funzionalità è possibile salvare un'esperienza di realtà aumentata per un uso futuro o per condividerla con altri utenti. +Grazie a questa funzionalità è possibile salvare un'esperienza di realtà aumentata per un uso futuro[^futuro] o per condividerla con altri utenti. In questo progetto verrà mostrato come sia possibile posizionare, tramite il device A, un vaso di fiori su una superficie piana, e vedere la stessa scena sul dispositivo B. +![Messaggio di avvenuto upload sul server](figures/ca1.png){#ca1 width=225px height=400px} + +![Schermata di ripristino di un'ancora](figures/ca2.png){#ca2 width=225px height=400px} + ### Configurazioni iniziali Per poter sfruttare le cloud anchors è necessario richiedere un API KEY sul sito di Google \url{https://console.cloud.google.com/apis/library/arcorecloudanchor.googleapis.com}. @@ -159,7 +163,7 @@ private fun checkCloudAnchor(frameTime: FrameTime) { } ``` -Nel caso specifico in cui il processo di caricamento sia stato completato con successo viene eseguita la funzione `checkHosting` che si occupa di notificare all'utente il codice numerico associato all'ancora e di cambiare lo stato dell'applicazione da `HOSTING` a `HOSTED`. +Nel caso specifico in cui il processo di caricamento sia stato completato con successo viene eseguita la funzione `checkHosting` che si occupa di notificare all'utente il codice numerico associato all'ancora(vedi fig. \ref{ca1}) e di cambiare lo stato dell'applicazione da `HOSTING` a `HOSTED`. ```kotlin private fun checkHosting() { @@ -183,7 +187,7 @@ private fun checkHosting() { ### Resolving dell'ancora L'utente può ripristinare un'ancora premendo sul pulsante *resolve*. -Il listener associato a questo evento è racchiuso nella funzione `onResolve` che a sua volta mostra all'utente un dialog in cui può inserire il codice dell'ancora da ripristinare. +Il listener associato a questo evento è racchiuso nella funzione `onResolve` che a sua volta mostra all'utente un dialog in cui può inserire il codice dell'ancora da ripristinare(vedi fig. \ref{ca2}). ```kotlin fun onResolveClick(view: View) { @@ -213,3 +217,5 @@ private fun onResolveOkPressed(dialogValue: String) { } } ``` + +[^futuro]: Il ripristino non può essere troppo dilazionato nel tempo in quanto le ancore vengono conservate sul server per massimo ventiquattro ore. diff --git a/src/figures/c.png b/src/figures/c.png new file mode 100644 index 0000000..f6caff3 Binary files /dev/null and b/src/figures/c.png differ diff --git a/src/figures/ca1.png b/src/figures/ca1.png new file mode 100644 index 0000000..09f7ab3 Binary files /dev/null and b/src/figures/ca1.png differ diff --git a/src/figures/ca2.png b/src/figures/ca2.png new file mode 100644 index 0000000..2737037 Binary files /dev/null and b/src/figures/ca2.png differ diff --git a/src/figures/rbm.png b/src/figures/rbm.png new file mode 100644 index 0000000..dcd8d25 Binary files /dev/null and b/src/figures/rbm.png differ diff --git a/src/figures/rfm.png b/src/figures/rfm.png new file mode 100644 index 0000000..c093be6 Binary files /dev/null and b/src/figures/rfm.png differ diff --git a/src/figures/ss.png b/src/figures/ss.png new file mode 100644 index 0000000..9e0d8d4 Binary files /dev/null and b/src/figures/ss.png differ