add figures
This commit is contained in:
parent
8cafa98316
commit
807f0d2b53
@ -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*.
|
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.
|
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.
|
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.
|
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.
|
[^sceneform-1.6]: Sceneform 1.6.0.
|
||||||
|
@ -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.
|
- `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.
|
- `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.
|
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
|
### Interazione con l'utente
|
||||||
|
|
||||||
Anche in questo caso l'interazione con l'utente è gestita mediante il metodo `setOnTapArPlaneListener`.
|
Anche in questo caso l'interazione con l'utente è gestita mediante il metodo `setOnTapArPlaneListener`.
|
||||||
|
@ -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.
|
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.
|
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
|
### Rilevamento della collisione
|
||||||
|
|
||||||
|
@ -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.
|
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.
|
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
|
#### Recupero e rendering dei modelli
|
||||||
|
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
## Cloud anchors
|
## 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.
|
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.
|
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
|
### 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}.
|
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
|
```kotlin
|
||||||
private fun checkHosting() {
|
private fun checkHosting() {
|
||||||
@ -183,7 +187,7 @@ private fun checkHosting() {
|
|||||||
### Resolving dell'ancora
|
### Resolving dell'ancora
|
||||||
|
|
||||||
L'utente può ripristinare un'ancora premendo sul pulsante *resolve*.
|
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
|
```kotlin
|
||||||
fun onResolveClick(view: View) {
|
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.
|
||||||
|
BIN
src/figures/c.png
Normal file
BIN
src/figures/c.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
BIN
src/figures/ca1.png
Normal file
BIN
src/figures/ca1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 MiB |
BIN
src/figures/ca2.png
Normal file
BIN
src/figures/ca2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 954 KiB |
BIN
src/figures/rbm.png
Normal file
BIN
src/figures/rbm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 MiB |
BIN
src/figures/rfm.png
Normal file
BIN
src/figures/rfm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 MiB |
BIN
src/figures/ss.png
Normal file
BIN
src/figures/ss.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 MiB |
Loading…
Reference in New Issue
Block a user