Autore Topic: View 360°  (Letto 5145 volte)

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
View 360°
« il: 07 Dicembre 2012, 10:00:06 CET »
0
Salve a tutti,
sono nuovo del forum e sto sviluppando un APP Android in cui ho necessità di creare una visualizzazione a 360°,
mi spiego meglio devo fare una simulazione di un ambiente con un punto di vista fisso e la possibilità di girarmi con il cellulare e potermi guardare intorno a 360°, contavo di usare qualche classe per la gestione della grafica OpenGL, qualcuno sa dove posso trovarla o mi può dare dei consigli in merito?
Grazie mille

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:View 360°
« Risposta #1 il: 07 Dicembre 2012, 12:33:12 CET »
+1
Qui trovi una libreria per Android che supporta le immagini con mappatura sferica, cubica e cilindrica:

http://code.google.com/p/panoramagl-android/

Il nuovo Android 4.2 ha il supporto per le foto panoramiche a 360° chiamate Photo Sphere, è appena uscita API, serve un dispositivo con le API 17:

http://developer.android.com/reference/com/google/android/gms/panorama/package-summary.html



adb logcat | tee /tmp/logcat | grep TAG

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:View 360°
« Risposta #2 il: 07 Dicembre 2012, 12:51:55 CET »
0
Grandissimo è proprio quello che cercavo ci do un'occhio e ti dico,
per ora grazie mille

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:View 360°
« Risposta #3 il: 29 Dicembre 2012, 16:00:57 CET »
0
Ciao iceweasel,
ho implementato la libreria che mi hai indicato, ma avrei una domanda, io uso l'accelerometro per il movimento up-down ma avrei due domande:

Il movimento è inverso nel senso che quando punto verso l'alto mi va in basso e viceversa, ho visto nel codice dove c'è una variabile private che va a testare che si chiama currentDeviceOrientation ma non c'è modo di settarla , non è che ti è già capitato il problema? Lo chiedo prima di mettermi a fare un Override della classe e fargli fare quello che serve a me anche se alla fine penso che sarò costretto a procedere in questo modo, come mai non hanno previsto questi settaggi da Json .

Poi volevo chiederti, per il movimento destra-sinistra dovrei usare la bussola, sai se devo usare il PLSensorTypeMagnetometer o il PLSensorTypeGyroscope? e se per caso hai un esempio per utilizzarlo.

Grazie mille

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:View 360°
« Risposta #4 il: 29 Dicembre 2012, 16:52:14 CET »
0
La libreria è open source quindi pui vedere tutti i sorgenti. Da quello che vedo c'è già tutto scritto per la gestione degli accelerometri, giroscopio, magnetometro, c'è il metodo "setAccelerometerEnabled" e puoi abilitare i vari orientamenti "setAccelerometerLeftRightEnabled" e "setAccelerometerUpDownEnabled", ha implementato anche l'inerzia.

Se vuoi un esempio sui sensori puoi vedere il programma "RotationVectorDemo" presente negli esempi delle API di Android, ruota un cubo in base alla posizione del telefono:

Cross Reference: /development/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.java
adb logcat | tee /tmp/logcat | grep TAG

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:View 360°
« Risposta #5 il: 29 Dicembre 2012, 23:57:01 CET »
0
Si  ho usato il setAccelerometerUpDownEnabled solo che appunto ha il movimento invertito.
Per i sensori ho visto che li utilizza solo che il mio dubbio era quale utilizzare se il magnetometro o il giroscopio.
Comunque do un'occhio all'esempio che mi hai indicato.
Grazie

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:View 360°
« Risposta #6 il: 30 Dicembre 2012, 10:45:11 CET »
0
La cosa migliore è usare TYPE_ROTATION_VECTOR (se disponibile) combina tutti i possibili sensori presenti per dare il miglior risultato. Usare singolarmente il TYPE_GYROSCOPE o TYPE_MAGNETIC_FIELD ottieni sempre delle informazioni non complete. Il giroscopio ottieni una velocità angolare ma non il verso, il sensore magnetico può fornire l'informazione del verso ma non un angolo. Tieni anche conto che solo pochi telefoni hanno tutti i sensori possibili.

La libreria non usa TYPE_ROTATION_VECTOR ma gli altri sensori singolarmente quindi difficilmente si riesce a ottenere un risultato buon in tutti i casi. La libreria ha delle impostazioni per alcuni orientamenti ma non so' se sono quelli che ti servono.
adb logcat | tee /tmp/logcat | grep TAG

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:View 360°
« Risposta #7 il: 30 Dicembre 2012, 14:27:01 CET »
0
Il TYPE_MAGNETIC_FIELD dovrebbe esser  quello che usa la bussola vero?
Dovrebbe fare al caso mio dato che mi serve solo l'orientamento spaziale, comunque strano che abbiano reso così limitato il numero di parametri settabili da json comunque penso che  la estenderò  con dei parametri che  mi servono.

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:View 360°
« Risposta #8 il: 30 Dicembre 2012, 19:41:49 CET »
0
Il TYPE_MAGNETIC_FIELD è quello che chiami magnetometro. Le funzioni di bussola è di solito fatta mettendo insieme il dati del  TYPE_MAGNETIC_FIELD e del TYPE_ACCELEROMETER.
adb logcat | tee /tmp/logcat | grep TAG

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:View 360°
« Risposta #9 il: 02 Gennaio 2013, 19:00:48 CET »
0
Purtroppo sto avendo problemi con il metodo che usa per muovere la panoramica con il touch , infatti anzichè muovere l'immagine con il trascinamento del dito la muove come se stessi premendo un pulsante che attiva la rotazione perpetua dell'immagine, nel senso io vorrei che trascino il dito fino a bordo schermo e li termina la rotazione , invece lui attiva una rotazione continua che io non voglio, sapete come intervenire e su quale metodo?

Ho visto che è una libreria un pò eccessiva per quello che serve a me, ne conoscete una più semplice?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:View 360°
« Risposta #10 il: 03 Gennaio 2013, 01:03:12 CET »
0
Ho visto che è una libreria un pò eccessiva per quello che serve a me, ne conoscete una più semplice?

Avevo indicato 2 librerie, la seconda più semplice è di Google, si trova negli extras, si scarica e si installa via SDK Manager e si chiama "Google Play Services". Insieme alla libreria aggiuntiva c'è un esempio nel file PanoramaSampleActivity.java. Per fare le immagini serve un telefono con le API 17 mentre per vederle la libreria impone API minima a 8.
adb logcat | tee /tmp/logcat | grep TAG

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:View 360°
« Risposta #11 il: 03 Gennaio 2013, 22:46:14 CET »
0
Cavoli ho fatto praticamente tutta l'app e mi manca solo questo cavolo di problema che scorre di continuo senza attenersi al semplice spostamento del touch , mi rode un bel pò dover rifare tutto, in oltre ho visto che quasi tutte le alternative usano immagini sferiche quando io ho necessità di creare una rappresentazione cubica che sono riuscito a creare con questa libreria cavolo!

iceweasel prima di tutto ti devo ringraziare per il tuo enorme aiuto,
ma tu hai avuto modo di utilizzare questa libreria? Se si sei riuscito ad individuare il punto dove crea questo fastidiosissimo effetto di scrolling continuo ?
Non sto riuscendo proprio ad individuare il punto su cui intervenire per farlo funzionare come un normalissimo effetto di trascinamento.
Mi faresti un favore enorme !
Grazie

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:View 360°
« Risposta #12 il: 04 Gennaio 2013, 01:44:52 CET »
+1
Francamente quello che tu chiami difetto è normale nei programmi che visualizzano immagini sferiche.

La proiezione cubic (6 immagini) è sopportata dalla prima libreria, la libreria di Google vuole immagini equirettangolari (io ho visto solo questo tipo di immagini prodotte). Se guardi la prima libreria puoi disattivare nel file json lo scrolling e l'inerzia:

Codice: [Seleziona]
...
   "sensorialRotation": false,         //Automatic rotation using sensors [true, false] <Optional>
   "scrolling":                        //Scrolling section <Optional>
    {
        "enabled": false                //Enable scrolling feature [true, false] <Optional>
    },
    "inertia":                          //Inertia section <Optional>
    {
        "enabled": false,               //Enable inertia feature [true, false] <Optional>
        "interval": 3                   //Inertia's interval in seconds <Optional>
    },
...


adb logcat | tee /tmp/logcat | grep TAG

Offline tonnuns

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:View 360°
« Risposta #13 il: 04 Gennaio 2013, 15:12:32 CET »
0
Già provato, ma purtroppo quelle impostazioni non gli fanno niente alla rotazione continua.
In pratica io non voglio che usi il touch come un acceleratore della rotazione che più ti sposti ai bordi e più aumenta la velocità di rotazione, io vorrei che la visuale si sposti come se la stessi trascinando , non so se mi spiego, purtroppo non avendo esperienza con OpenGl sto trovando difficoltà a modificare questa classe.
Ho fatto l'Override di una marea di metodi tentando di modificarli per modificare il comportamento ma niente.

Sembra che gli imposti due parametri che sono StartPoint e  EndPoint , e l'immagine continua a ruotere finchè  StartPoint e  EndPoint non tornano ad essere lo stesso valore.

protected void drawViewInternally()
   {
      if(isRendererCreated)
      {
         if(scene != null)
         {
            if(!isValidForFov && !isRunningSensorialRotation)
               scene.getCurrentCamera().rotateWith(startPoint, endPoint);
            if(renderer != null && surfaceView != null)
               surfaceView.requestRender();
         }
      }
   }

e con surfaceView.requestRender(); disegna in continuazione l'immagine solo che se su scene.getCurrentCamera().rotateWith(startPoint, endPoint); i due parametri di start e end sono diversi attiva la rotazione continua finchè non si stacca il dito dallo schermo.
Io invece vorrei che la rotazione avvenga per la sola differenza dei due punti quindi per:

numScrol = (int) PLMath.distanceBetweenPoints(getStartPoint(), getEndPoint());

Ma non so come impostargli quersta funzione.

Ho paura che debbo abbandonare questa classe se continuo a perder tempo, solo che si sa il detto, chi lascia la strada vecchia per la nuova sa quello che lascia ma non sa quello che trova!


Quella classe di Google che mi hai detto come fai a creare l'immagine sferica e poi il movimento è come quello che serve a me o uguale a quello di panoramaGL?
« Ultima modifica: 04 Gennaio 2013, 15:14:53 CET da tonnuns »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:View 360°
« Risposta #14 il: 04 Gennaio 2013, 16:37:26 CET »
0
La libreria panoramaGL è open source e puoi vedere i sorgenti.

La classe che ti ho detto è semplicemente l'esempio che richiama una libreria esterna (non open source) di Google per vedere le immagini equirettangolari simile ma più semplice di panoramaGL.
« Ultima modifica: 05 Gennaio 2013, 13:06:18 CET da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG