giovedì 19 marzo 2009

Disegnare delle semplici forme (parte 2)

Il seguente post è la traduzione di un tutorial scritto da Jérôme JOUVIE

LE TRASFORMAZIONI
Una trasformazione è una traslazione, una rotazione o una scala. Il disegno viene effettuato trasformando il sistema di coordinate.

Useremo una traslazione per spostare la piramide a sinistra e il cubo a destra. Senza le trasformazioni, il cubo e la piramide sarebbero uno sopra l'altra.

TRASLAZIONE
Prima di disegnare gli oggetti, iniziamo con la traslazione del centro del sistema di coordinate dove verrà disegnata la piramide. Per posizionare la piramide a sinistra, non dobbiamo far altro che traslare il sistema degli assi in questo modo:
gl.glTranslatef(xTranslation, yTranslation, zTranslation)
Per la piramide, faremo una traslazione con questi valori (-1.5f, 0.0f, -8.0f).

Il centro del sistema di coordinate verrà spostato di 1.5 unità a sinistra e di 8 unità indietro. Il motivo per cui trasliamo lungo l'asse z è che inizialmente il sistema di coordinate è sul piano vicino del volume della vista.

Per posizionare il cubo, ci sono diverse soluzioni:
  • Metodo 1: traslare a destra, simmetricamente rispetto alla piramide
    gl.glTranslatef(3.0f, 0.0f, 0.0f)
  • Metodo 2: resettare la vista e spostare la posizione del cubo
    gl.glLoadIdentity()
    gl.glTranslatef(1.5f, 0.0f, zOffset)
glLoadIdentity reimposta allo stato iniziale il sistema di coordinate (cancella gli effetti delle trasformazioni)

ROTAZIONE
Per ruotare il sistema degli assi attorno al suo centro, useremo l'istruzione:
gl.glRotatef ( angolo, xAxis, yAxis, zAxis)
I parametri *Axis è un vettore unità che definisce gli assi della rotazione (ê nell'immagine). Rappresenta un vettore unità. Il parametro angolo è l'angolo di rotazione in gradi (θ nell'immagine)
Dimensione carattereRotazione Assi/Angolo, immagine presa da Wikipedia

Qui vogliamo che la forma ruoti attorno all'asse verticale. L'asse verticale è y, quindi la direzione è (0, 1, 0); rotPyramid rappresenta l'angolo di rotazione in gradi:
gl.glRotatef(rotPyramid, 0.0f, 1.0f, 0.0f) // rotazione attorno all'asse y

DOWLOADS SORGENTI (link al sito originale)

Nessun commento:

Posta un commento