Autore Topic: Ruotare un quadrato intorno al suo centro  (Letto 1926 volte)

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Ruotare un quadrato intorno al suo centro
« il: 18 Giugno 2010, 19:22:44 CEST »
0
Ho un qudrato disegnato con GL_TRIANGLES_STRIP, quindi due triangoli.
Questo quadrato è posizionato sul piano in una posizione precisa, diversa dall'origine. Voglio farlo ruotare intorno al suo centro di un certo angolo alfa, quindi intono all'asse z, ma mantenendo la posizione che occupa sul piano.

Provando con glRotatef(45, 0, 0 , 1) il quadrato ruota di 45gradi intorno all'asse z dell'origine, modificando così anche la sua posizione.

Come posso fare?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Ruotare un quadrato intorno al suo centro
« Risposta #1 il: 21 Giugno 2010, 16:14:39 CEST »
+2
Una risposta potrebbe essere quella di traslarlo in modo da spostare l'origine degli assi al centro del quadrato, dopodiché ruotarlo e ri-traslarlo alla sua posizione originaria.

glPushMatrix();
glTranslate(...);  //piazzi l'origine al centro del quadrato
glRotate(...);      //ruoti
glTranslate(...)   //trasli il quadrato, con il centro come punto di riferimento
//disegna il tuo quadrato....
glPopMatrix();

il push e il pop matrix vengono utilizzate per fare si che la matrice che stavi utilizzando in precedenza non venga cambiata, perché altrimenti, effettuando le rotazioni e le traslazioni, tutto quello che viene disegnato dal quel momento in poi verrà traslato e ruotato di conseguenza. (spero di essere stato chiaro).

Nota bene: se stai utilizzando le opengl es 2.0 dovresti implementarti qualcosa che sopperisca a push e pop matrix, altrimenti fino alla 1.1 le trovi.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Ruotare un quadrato intorno al suo centro
« Risposta #2 il: 21 Giugno 2010, 16:58:29 CEST »
0
Grazie!
Fatto però ho dovuto invertire le due traslazioni, cioè mi spiego

logicamente avrei dovuto fare

glTraslate(); //traslazioen che porta il poligono nell'origini
glRotate(); //ruoto
glTraslate(); //traslazione inversa per portarla alla precedente posizione

se facevo così non funzionava, perchè a seguito della traslazione, mi traslano anche gli assi di rifeimento dell'oggetto e la traslazione inversa quindi andrebbe ricalcolata e non sarebbe gratis aggiungendo semplicemente un meno davanti ai valori.

se invece faccio

glTraslate(); //traslazione inversa per portarla alla precedente posizione
glRotate(); //ruoto
glTraslate(); //traslazioen che porta il poligono nell'origini

ottengo il tutto a gratis aggiungendo appunto il meno alla traslazione inversa. Non so bene il perchè...  :-)

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Ruotare un quadrato intorno al suo centro
« Risposta #3 il: 21 Giugno 2010, 17:00:06 CEST »
0

Nota bene: se stai utilizzando le opengl es 2.0 dovresti implementarti qualcosa che sopperisca a push e pop matrix, altrimenti fino alla 1.1 le trovi.

Si ho fatto tutto dentro il blocco Push/Pop. Ma è interessante questa cosa che hai appena detto... io uso appunto la versione 1.1 ancora non sono passato a Froyo, ma cosa vorresti dire? che con opengl es 2.0 push/pop sono deprecate e non più disponibili?

p.s. intanto metto risolto.

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Ruotare un quadrato intorno al suo centro
« Risposta #4 il: 21 Giugno 2010, 17:46:10 CEST »
0
Il passaggio da 1.1 a 2.0 non è stato indolore, in quanto la 2.0 è stata incentrata sulla programmabilità della pipeline grafica, prediligendo l'utilizzo degli shaders e sopprimendo tutte le funzioni che non vanno in questa direzione.
Questo vuol dire che ciò che è stato scritto per la 1.1 non necessariamente funzionerà con la 2.x a meno di adattamenti vari.

Per quanto riguarda l'ordine delle chiamate rotate, translate.... la sequenza che inserisci tu viene memorizzata (e non immediatamente eseguita) in una struttura di tipo stack; successivamente viene prelevata (in ordine inverso a quello di inserimento) ed eseguita, per cui in generale la sequenza di trasformazione deve essere inserita in senso contrario (attenzione che glLoadIdentity non fa parte di questa logica).

Spero di esserti stato d'aiuto.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Ruotare un quadrato intorno al suo centro
« Risposta #5 il: 21 Giugno 2010, 17:50:40 CEST »
0
si chiarissimo grazie mille!

Ora che mi hai detto questo ho tanta paura ha passare alla 2.0, ma con il passaggioa  Froyo, mi sa che sarò obbligato a riguarda il codice.  :-(

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Ruotare un quadrato intorno al suo centro
« Risposta #6 il: 21 Giugno 2010, 18:19:26 CEST »
0
uhm...non credo.
Hanno aggiunto il supporto alle openGL ES 2.0; pensi che le applicazioni scritte in 1.1 non funzionino più? ;)


7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/