Autore Topic: disegnare una griglia 3D  (Letto 2045 volte)

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
disegnare una griglia 3D
« il: 02 Aprile 2010, 18:40:55 CEST »
0
Avete presente Layar? Devo poter fare una griglia 3D come quella di layar e che risponda ai movimenti del cellulare mediante l'uso dei sensori.
Volevo giusto un consiglio... per farla secondo voi mi conviene lavorare con OpenGL? Nel caso conoscente dei link che possano aiutarmi, dato che sarebbe la prima volta che lavoro con OpenGL?
« Ultima modifica: 15 Maggio 2010, 17:24:06 CEST da JD »

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:disegnare una griglia 3D
« Risposta #1 il: 13 Aprile 2010, 22:08:41 CEST »
0
la griglia l'ho disegnata. ho seguito questo tutorial molto interessante.

- Parte I
- Parte II

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:disegnare una griglia 3D
« Risposta #2 il: 13 Aprile 2010, 22:30:46 CEST »
0
ora però ho un altro bel problema.

openGl ad ogni frame ridisegna la griglia, quindi ad ogni frame posso effettuare delle trasformazioni sull'oggetto.
Nel mio caso traslazione e rotazione. Faccio la traslazione per posizionarmi al centro della griglia, in realtà e la griglia che si sposta non io... poi utilizzando i sensori di orientamento effettuo 3 rotazioni, una su ogni asse. Prima X, poi Y e infine Z.
Considerate che il sistema di riferimento di openGL secondo documentazione é:

The coordinate space is defined relative to the screen of the phone
 in its default orientation. The axes are not swapped when the device's
 screen orientation changes.
 
 The OpenGL ES coordinate system is used. The origin is in the
 lower-left corner  with respect to the screen, with the X axis horizontal
 and pointing  right, the Y axis vertical and pointing up and the Z axis
 pointing outside the front face of the screen. In this system, coordinates
 behind the screen have negative Z values.
 
 Note: This coordinate system is different from the one used in the
 Android 2D APIs where the origin is in the top-left corner.


Detto questo... se io ho il device in portrait, in verticale rispetto al pavimento, bene o male il risultato è buono, muovendo il device la griglia si muove a sua volta, però se ruoto intorno all'asse z (che punta verso di me), quindi è sto ruotando il cellualre come un volante di un auto verso dx o sx, e contemporaneamente ruoto intono all'asse x, il risultato non è come speravo.... il movimento della griglia diventa scattoso e poco spreciso.

La cosa mi fa pensare... perchè se effettuo una rotazione di 90° intorno all'asse Z e quindi portando il device in landscape il giochino non funziona più... questo credo perchè come dice la documentazione "The axes are not swapped when the device's screen orientation changes."

A questo punto leggendo la documentazione riguardo i sensori di orientamento, viene suggerito questo:
Note: It is preferable to use getRotationMatrix() in conjunction with remapCoordinateSystem() and getOrientation() to compute these values; while it may be more expensive, it is usually more accurate.

qualcuno ha già lavorato con questi metodi da potermi aiutare a capire se possono fare al caso mio?