Site

Libreria 3 D

Site.Libreria3D History

Hide minor edits - Show changes to output

August 20, 2014, at 02:38 PM by Massimiliano Vessi -
Changed lines 132-134 from:
{$ [(v3_x,a l t o_x,DOF_x,C_x),(v3_y,a l t o_y,DOF_y,C_y),(v3_z,a l t o_z,DOF_z,C_z),(0,0,0,1)]^-1 * [(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,1/f,1)] * [(X),(Y),(Z),(1)] = [(X_2),(Y_2),((Z + f)/f),(1)] $}
to:
{$ [(v3_x,a l t o_x,DOF_x,C_x),(v3_y,a l t o_y,DOF_y,C_y),(v3_z,a l t o_z,DOF_z,C_z),(0,0,0,1)]^-1 * [(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,1/f,1)] * [(X),(Y),(Z),(1)] = [(X_2),(Y_2),((Z + f)/f),(1)] $}

In questo modo ilvettore ha gia' tutte le informazioni che ci servono per ogni punto: X,Y, fattore di scala.
August 20, 2014, at 02:35 PM by Massimiliano Vessi -
Changed line 132 from:
{$ [(v3_x,a l t o_x,DOF_x,C_x),(v3_y,a l t o_y,DOF_y,C_y),(v3_z,a l t o_z,DOF_z,C_z),(0,0,0,1)]^-1 * [(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,1/f,1)] [(X),(Y),(Z),(1)] = [(X_2),(Y_2),((Z + f)/f),(1)] $}
to:
{$ [(v3_x,a l t o_x,DOF_x,C_x),(v3_y,a l t o_y,DOF_y,C_y),(v3_z,a l t o_z,DOF_z,C_z),(0,0,0,1)]^-1 * [(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,1/f,1)] * [(X),(Y),(Z),(1)] = [(X_2),(Y_2),((Z + f)/f),(1)] $}
August 20, 2014, at 02:34 PM by Massimiliano Vessi -
Added lines 129-132:

quindi potremmo scrivere:

{$ [(v3_x,a l t o_x,DOF_x,C_x),(v3_y,a l t o_y,DOF_y,C_y),(v3_z,a l t o_z,DOF_z,C_z),(0,0,0,1)]^-1 * [(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,1/f,1)] [(X),(Y),(Z),(1)] = [(X_2),(Y_2),((Z + f)/f),(1)] $}
June 24, 2014, at 12:01 PM by Massimiliano Vessi -
Deleted lines 128-130:


''Continua....''
June 24, 2014, at 11:53 AM by Massimiliano Vessi -
Added lines 32-33:
Le seguenti trasformazioni servono per spostare gli oggetti e preparare la scena che volete ritrarre. Con le seguenti trasformazioni potete spostare tutti gli oggetti come piu' vi piace.
Changed line 126 from:
Usare il trucco e' lo stesso che usare la formula corretta? '''No'''. La vista cambia sensibilmente, ma per tutti gli oggetti che gia' si trovavano dietro lo schermo la differenza e' minima. Al contrario per gli oggetti tra lo schermo e la telecamere la prospettiva e' molto diversa. Comunque quasi tutti i programmi di 3D usano questo trucco. Ecco un esempio di come cambia la prospettiva dello stesso oggetto, notate come e' forte il cambiamento del parallelepipedo vicino alla telecamera: con il coefficiente {$ z/f $} mostra tre lati, mentre con {$ (z+f)/f $} ne mostra solo due.
to:
Usare il trucco e' lo stesso che usare la formula corretta? '''No'''. La vista cambia sensibilmente, ma per tutti gli oggetti che gia' si trovavano dietro lo schermo la differenza e' minima. Al contrario per gli oggetti tra lo schermo e la telecamere la prospettiva e' molto diversa. Comunque quasi tutti i programmi di 3D usano questo trucco. Ecco un esempio di come cambia la prospettiva dello stesso oggetto, notate come e' forte il cambiamento del parallelepipedo vicino alla telecamera: con il coefficiente {$ z/f $} mostra quattro lati (deformazione prospettica), mentre con {$ (z+f)/f $} ne mostra solo tre.
June 19, 2014, at 10:18 PM by 151.24.24.135 -
Changed lines 11-14 from:
Questa e'  una matrice 3x1 (tre righe ed una sola colonna). Nelle operazioni grafiche si usa quasi sempre la notazione matriciale, perche' fa capire a colpo d'occhio cosa si fa. Una equazione fra matrici di una sola riga equivale sempre ad almeno tre lunghissime equazioni normali: una per ogni coordinata. Scrivere in forma matriciale fa risparmiare tempo e capire piu' semplicemente.

Ora la questione
si complica un pochino: per come sono costituite le matrici per le operazioni grafiche, cioe' di 4 righe e 4 colonne (4x4), serve che la matrice che indichi le coordinate dei nostri punti sia fatta almeno di 4 righe, altrimenti non e' possibile moltiplicarle correttamente tra loro. Per questo motivo si aggiunge un 1 che e' ininfluente sulle coordinate, ma permette di compiere correttamente le operazioni fra matrici. Ecco quindi come scrivere la matrice delle coordinate di un punto in grafica 3D:
to:
Questa e'  una matrice 3x1 (tre righe ed una sola colonna). Nelle operazioni grafiche si usa quasi sempre la notazione matriciale, perche' fa capire a colpo d'occhio cosa si fa. Un'equazione fra matrici di una sola riga equivale sempre ad almeno tre lunghissime equazioni normali: una per ogni coordinata. Scrivere in forma matriciale fa risparmiare tempo e capire piu' semplicemente le operazioni che si eseguono.

Ora la questione si complica un pochino: per come sono costituite
le matrici per le operazioni grafiche, cioe' di 4 righe e 4 colonne (4x4), serve che la matrice che indica le coordinate dei nostri punti sia fatta almeno di 4 righe; altrimenti non e' possibile moltiplicarle correttamente tra loro. Per questo motivo si aggiunge un 1 che e' ininfluente sulle coordinate, ma permette di compiere correttamente le operazioni fra matrici. Ecco quindi come scrivere la matrice delle coordinate di un punto in grafica 3D:
Changed lines 59-60 from:
Ora vediamo come è semplice combinare tutte le operazioni insieme, vedete come con la notazione matriciale è molto compatta
to:
Ora vediamo come è semplice combinare tutte le operazioni insieme, vedete come l'espressione con la notazione matriciale risulti molto compatta:
Changed lines 77-78 from:
La posizione della telecamera non basta per definirla correttamente, dobbiamo anche definire dove guarda, la cosiddetta '''Direzione della visuale'''  (in inglese ''DOF'' o ''DOP''):
to:
Riguardo alla telecamera bisogna indicare oltra alla posizione dove guarda, la cosiddetta '''Direzione della visuale'''  (in inglese ''DOF'' o ''DOP''):
Changed lines 81-82 from:
e bisogna dire quale e' l'alto e il basso per la telecamera. Se l'alto per esempio e' come vediamo le immagini, la sfera sara' a sinistra e il cubo a destra; se l'alto e' in basso avremo la sfera a destra e il cubo a sinistra. Se l'alto fosse a sinistra, avremmo la sfera sopra il cubo! Se ora non vi e' chiaro questo concetto, piu' avanti lo diventera'. Ora la telecamera e' correttamente definita:
to:
e bisogna dire qual e' ''l'alto'' per la telecamera. Se l'alto per esempio e' come vediamo le immagini, la sfera sara' a sinistra e il cubo a destra; se l'alto e' in basso avremo la sfera a destra e il cubo a sinistra. Se l'alto fosse a sinistra, avremmo la sfera sopra il cubo! Se ora non vi e' chiaro questo concetto, piu' avanti lo diventera'. Ora la telecamera e' correttamente definita:
Changed lines 85-86 from:
Ora dobbiamo pensare alla superficie bidimensionale che intercetta la proiezione della scena verso la telecamera, questa rappresenta lo schermo del PC. Questa superficie e' rettangolare, ha un'altezza, una larghezza e una distanza dalla telecamera, molte volte questa distanza e' chiamata ''fuoco''. La superficie bidimensionale e' sempre ortogonale al vettore della direzione della visuale e parallela al vettore che indica il sopra:
to:
Ora dobbiamo pensare alla superficie bidimensionale che intercetta la proiezione della scena verso la telecamera, questa rappresenta lo schermo del PC. Questa superficie e' rettangolare, ha un'altezza, una larghezza e una distanza dalla telecamera, quest'ultima e' detta ''fuoco''. La superficie bidimensionale e' sempre ortogonale al vettore della direzione della visuale e parallela al vettore che indica ''l'alto'':
Changed lines 89-90 from:
La preparazione per il passaggio in 2D è completo, ora basta tracciare le proiezioni degli oggetti verso la telecamera e avremo la nostra scena appiattita sullo schermo:
to:
La preparazione per il passaggio in 2D è completa, ora basta tracciare le proiezioni degli oggetti verso la telecamera e avremo la nostra scena appiattita sullo schermo:
Changed lines 99-100 from:
Dal punto dei vista dei numeri abbiamo che quando posizioniamo gli oggetti e la telecamera siamo un un sistema di riferimento arbitrario che possiamo chiamare ''di partenza'' o ''mondo reale'' (in inglese lo chiamano anche ''world'').  Immaginiamo di aver piazzato la nostra telecamera nel punto C di coordinate (C'_x_', C'_y_', C'_z_').
to:
Dal punto dei vista dei numeri abbiamo che quando posizioniamo gli oggetti e la telecamera siamo in un sistema di riferimento arbitrario che possiamo chiamare ''di partenza'' o ''mondo reale'' (in inglese lo chiamano anche ''world'').  Immaginiamo di aver piazzato la nostra telecamera nel punto C di coordinate (C'_x_', C'_y_', C'_z_').
Changed lines 113-117 from:
Ora le coordinate le nuove coordinate ''x,y'' sono quelle che potremmo mettere direttamente sullo schermo, solo che vanno scalate a seconda della distanza dalla telecamera per fare una corretta rappresentazione. Qui ci sono due vie per trovare il coefficiente per scalare le coordinate.

La prima e' quella piu' rigorosa e corretta matematicamente e' di dividere le coordinate dei punti per il rapporto {$ z/f $} dove Z è la coordinata che rappresenta la distanza del punto dalla telecamera lungo l'asse della ''direzione di vista'' e ''f'' e' la distanza focale. C'e' un effetto curioso facendo cosi', gli oggetti che vogliamo rappresentare ma che si trovano tra la telecamera e lo schermo (dentro la lunghezza ''f'' fuoco) vengono ingranditi invece di essere rimpiccioliti. Ecco la spiegazioni grafica:

to:
Ora  le nuove coordinate ''x,y'' sono quelle che potremmo mettere direttamente sullo schermo, solo che vanno scalate a seconda della distanza dalla telecamera per fare una corretta rappresentazione. Qui ci sono due vie per trovare il coefficiente per scalare le coordinate.

La prima, piu' rigorosa e corretta matematicamente, consiste nel dividere le coordinate dei punti per il rapporto {$ z/f $} dove Z è la coordinata che rappresenta la distanza del punto dalla telecamera lungo l'asse della ''direzione di vista'' e ''f'' e' la distanza focale. C'e' un effetto curioso facendo cosi', gli oggetti che vogliamo rappresentare ma che si trovano tra la telecamera e lo schermo (dentro la lunghezza ''f'' fuoco) vengono ingranditi invece di essere rimpiccioliti. Ecco la spiegazioni grafica:

Changed line 120 from:
E' chiaro che la formula nasce solo per mostrare quello che e' dietro lo schermo, ma cosi' dovremmo calcolare cio' che e' dietro lo schermo e cio' che e' tra lo schermo e la telecamera. Per evitare di fare troppi conti si preferisce usare un trucco, cioe' utilizzare come coefficiente per scalare le coordinate il rapporto {$ (z+f)/f $}, che e' come traslare tutto lungo la direzione di vista di una lunghezza f (fuoco) in modo che non ci sia nulla tra la telecamera. Ecco il risultato:
to:
E' chiaro che la formula nasce solo per mostrare quello che e' dietro lo schermo, ma cosi' dovremmo calcolare cio' che e' dietro lo schermo e cio' che e' tra lo schermo e la telecamera. Per evitare di fare troppi conti si preferisce usare un trucco, cioe' utilizzare come coefficiente per scalare le coordinate il rapporto {$ (z+f)/f $}, che e' come traslare tutto lungo la direzione di vista di una lunghezza f (fuoco) in modo che non ci sia nulla tra la telecamera e lo schermo. Ecco il risultato:
June 19, 2014, at 09:47 PM by 151.24.24.135 -
Changed line 6 from:
d
to:
June 19, 2014, at 03:12 PM by Massimiliano Vessi -
Added line 127:
June 19, 2014, at 02:57 PM by Massimiliano Vessi -
Changed lines 124-127 from:
Usare il trucco e' lo stesso che usare la formula corretta? No. La vista cambia sensibilmente, ma per tutti gli oggetti che gia' si trovavano dietro lo schermo la differenza e' minima. Al contrario per gli oggetti tra lo schermo e la telecamere la prospettiva e' molto diversa. Comunque quasi tutti i programmi di 3D usano il trucco.
to:
Usare il trucco e' lo stesso che usare la formula corretta? '''No'''. La vista cambia sensibilmente, ma per tutti gli oggetti che gia' si trovavano dietro lo schermo la differenza e' minima. Al contrario per gli oggetti tra lo schermo e la telecamere la prospettiva e' molto diversa. Comunque quasi tutti i programmi di 3D usano questo trucco. Ecco un esempio di come cambia la prospettiva dello stesso oggetto, notate come e' forte il cambiamento del parallelepipedo vicino alla telecamera: con il coefficiente {$ z/f $} mostra tre lati, mentre con {$ (z+f)/f $} ne mostra solo due.

Attach:3d11.png

June 19, 2014, at 02:19 PM by Massimiliano Vessi -
Added lines 113-124:
Ora le coordinate le nuove coordinate ''x,y'' sono quelle che potremmo mettere direttamente sullo schermo, solo che vanno scalate a seconda della distanza dalla telecamera per fare una corretta rappresentazione. Qui ci sono due vie per trovare il coefficiente per scalare le coordinate.

La prima e' quella piu' rigorosa e corretta matematicamente e' di dividere le coordinate dei punti per il rapporto {$ z/f $} dove Z è la coordinata che rappresenta la distanza del punto dalla telecamera lungo l'asse della ''direzione di vista'' e ''f'' e' la distanza focale. C'e' un effetto curioso facendo cosi', gli oggetti che vogliamo rappresentare ma che si trovano tra la telecamera e lo schermo (dentro la lunghezza ''f'' fuoco) vengono ingranditi invece di essere rimpiccioliti. Ecco la spiegazioni grafica:


Attach:3d9.png

E' chiaro che la formula nasce solo per mostrare quello che e' dietro lo schermo, ma cosi' dovremmo calcolare cio' che e' dietro lo schermo e cio' che e' tra lo schermo e la telecamera. Per evitare di fare troppi conti si preferisce usare un trucco, cioe' utilizzare come coefficiente per scalare le coordinate il rapporto {$ (z+f)/f $}, che e' come traslare tutto lungo la direzione di vista di una lunghezza f (fuoco) in modo che non ci sia nulla tra la telecamera. Ecco il risultato:

Attach:3d10.png

Usare il trucco e' lo stesso che usare la formula corretta? No. La vista cambia sensibilmente, ma per tutti gli oggetti che gia' si trovavano dietro lo schermo la differenza e' minima. Al contrario per gli oggetti tra lo schermo e la telecamere la prospettiva e' molto diversa. Comunque quasi tutti i programmi di 3D usano il trucco.
June 19, 2014, at 10:55 AM by Massimiliano Vessi -
Changed line 111 from:
Attach:3d7.png
to:
Attach:3d8.png
June 19, 2014, at 10:55 AM by Massimiliano Vessi -
Added lines 108-111:

L'esponente '''-1''' della matrice significa che bisogna farne ''l'inversione'', un'operazione matriciale alquanto complessa. Graficamente il disegno sottostante spiega quello che si fa:

Attach:3d7.png
June 19, 2014, at 10:34 AM by Massimiliano Vessi -
Changed lines 102-107 from:
{$ [(v3_x,alto_x,DOF_x,C_x),(v3_y,alto_y,DOF_y,C_y),(v3_z,alto_z,DOF_z,C_z),(0,0,0,1)] $}
to:

{$ [(v3_x,a l t o_x,DOF_x,C_x),(v3_y,a l t o_y,DOF_y,C_y),(v3_z,a l t o_z,DOF_z,C_z),(0,0,0,1)] $}

quindi per avere le coordinate dei punti nel nuovo sistema di riferimento bisogna fare la seguente operazione:

{$ [(v3_x,a l t o_x,DOF_x,C_x),(v3_y,a l t o_y,DOF_y,C_y),(v3_z,a l t o_z,DOF_z,C_z),(0,0,0,1)]^-1 * [(X),(Y),(Z),(1)] = [(X_2),(Y_2),(Z_2),(
1)] $}
June 19, 2014, at 10:29 AM by Massimiliano Vessi -
Added lines 97-98:
Che cosa e' il vettore '''V3'''? E' un vettore ortogonale al vettore ''Alto'' e al vettore ''Direzione visuale''. Ci servira' piu' avanti.
Changed lines 101-102 from:
Se immaginiamo la superficie dello schermo come un piano x,y parallelo al piano  , dobbiamo passare dal sistema di riferimento ''di partenza'' a quello dello s. In questo modo le coordinate dei punti dello schermo
to:
Se immaginiamo la superficie dello schermo del PC come un piano ''x,y'' parallelo al piano ''alto,v3''  , ci basta passare dal sistema di riferimento ''di partenza'' a quello centrato nella telecamera formato da ''alto,direzione visuale,v3'' per avere le coordinate x,y dello schermo sul piano giusto. Per fare cio' basta creare la matrice di cambio di sistema di riferimento M cosi' fatta:
{$ [(v3_x,alto_x,DOF_x,C_x),(v3_y,alto_y,DOF_y,C_y),(v3_z,alto_z,DOF_z,C_z),(0,0,0,1)] $}
June 19, 2014, at 10:20 AM by Massimiliano Vessi -
Changed line 99 from:
to:
Se immaginiamo la superficie dello schermo come un piano x,y parallelo al piano  , dobbiamo passare dal sistema di riferimento ''di partenza'' a quello dello s. In questo modo le coordinate dei punti dello schermo
June 18, 2014, at 05:53 PM by Massimiliano Vessi -
Changed lines 77-78 from:
La posizione della telecamera non basta per definirla correttamente, dobbiamo anche definire dove guarda, la cosiddetta '''Direzione della visuale'''  (in inglese DOF):
to:
La posizione della telecamera non basta per definirla correttamente, dobbiamo anche definire dove guarda, la cosiddetta '''Direzione della visuale'''  (in inglese ''DOF'' o ''DOP''):
Added lines 96-97:

Dal punto dei vista dei numeri abbiamo che quando posizioniamo gli oggetti e la telecamera siamo un un sistema di riferimento arbitrario che possiamo chiamare ''di partenza'' o ''mondo reale'' (in inglese lo chiamano anche ''world'').  Immaginiamo di aver piazzato la nostra telecamera nel punto C di coordinate (C'_x_', C'_y_', C'_z_').
June 18, 2014, at 10:42 AM by Massimiliano Vessi -
Changed line 6 from:
to:
d
Changed line 41 from:
Per le rotazioni la questione e' piu' spinosa, qualunque rotazione, per quanto complessa, puo' essere scomposta come una somma di rotazioni attorno ai tre assi principali (x,y,z), quindi c'e' una matrice di da applicare per la rotazione su ogni asse.
to:
Per le rotazioni la questione e' piu' spinosa, qualunque rotazione, per quanto complessa, puo' essere scomposta come una somma di rotazioni attorno ai tre assi principali (x,y,z), quindi c'e' una matrice da applicare per la rotazione su ogni asse.
June 18, 2014, at 10:38 AM by Massimiliano Vessi -
Added lines 16-28:

!!Moltiplicazione tra matrici

L'uso delle matrice semplifica la scrittura delle equazioni, perche' ad esempio il seguente prodotto:

{$ [(a, b, c, d), (e, f, g, h), (i, l, m, n), (p, q, r, s)] . [(x), (y), (z), (1)] = [(x_2), (y_2), (z_2), (w)]$}

significa fare le seguenti quattro operazioni:
* {$ x_2 = d + a x + b y + c z $}
* {$ y_2=  h + e x + f y + g z $}
* {$ z_2 = n + i x + l y + m z $}
* {$ w = s + p x + q y + r z $}

June 18, 2014, at 10:05 AM by Massimiliano Vessi -
Changed line 48 from:
{$ [(1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)] * [(1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)] * [(cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)] * [(cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)] * [(a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
to:
{$ [(1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)] * [(1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)] * [(cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)] * [(cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)] * [(a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)] * [(P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
June 18, 2014, at 10:04 AM by Massimiliano Vessi -
Changed line 48 from:
{$ ((1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)) * ((1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)) * ((cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)) * ((cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)) * ((a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
to:
{$ [(1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)] * [(1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)] * [(cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)] * [(cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)] * [(a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
June 18, 2014, at 10:01 AM by Massimiliano Vessi -
Changed lines 9-10 from:
{$ ((X),(Y),(Z)) $}
to:
{$ [(X),(Y),(Z)] $}
Changed lines 15-16 from:
{$ ((X),(Y),(Z),(1)) $}
to:
{$ [(X),(Y),(Z),(1)] $}
Changed lines 22-23 from:
{$  ((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1) )  * ((X),(Y),(Z),(1)) = ((X),(Y),(Z),(1)) $}
to:
{$  [(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1) ]  * [(X),(Y),(Z),(1)] = [(X),(Y),(Z),(1)] $}
Changed lines 26-27 from:
{$ ((1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
to:
{$ [(1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)] * [(P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
Changed lines 32-33 from:
{$ ((1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
to:
{$ [(1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)] * [(P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
Changed lines 36-37 from:
{$ ((cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
to:
{$ [(cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)] * [(P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
Changed lines 40-41 from:
{$ ((cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
to:
{$ [(cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)] * [(P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
Changed line 44 from:
{$ ((a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
to:
{$ [(a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)] * [(P1_X ),(P1_Y ),(P1_Z ), (1)] = [(P2_X) ,(P2_Y),(P2_Z),(1)] $}
June 17, 2014, at 04:00 PM by Massimiliano Vessi -
Changed line 54 from:
Lo schermo del PC e' una superficie piana a due dimensioni, mentre uno spazio tridimensionale ne ha tre: come facciamo a perdere una dimensione senza fare un pasticcio?  Bisogna andare per gradi per capire il procedimento.
to:
Lo schermo del PC e' una superficie piana a due dimensioni, mentre uno spazio tridimensionale ne ha tre: come facciamo a perdere una dimensione senza fare un pasticcio?  Bisogna andare per gradi per capire il procedimento. Prima di continuare con le formule, vediamo gli aspetti concettuali.
June 17, 2014, at 03:58 PM by Massimiliano Vessi -
Added lines 79-84:

Se tutto è andato bene dovremmo ottenere il seguente risultato:

Attach:3d7.png

June 17, 2014, at 03:49 PM by Massimiliano Vessi -
Changed lines 76-78 from:
to:
La preparazione per il passaggio in 2D è completo, ora basta tracciare le proiezioni degli oggetti verso la telecamera e avremo la nostra scena appiattita sullo schermo:

Attach:3d6.png
June 17, 2014, at 03:30 PM by Massimiliano Vessi -
Changed lines 68-69 from:
e bisogna dire quale e' l'alto e il basso per la telecamera. Se l'alto per esempio e' come vediamo le immagini, la sera sara' a sinistra e il cubo a destra; se l'alto e' in basso avremo la sfera a destra e il cubo a sinistra. Se l'alto fosse a sinistra, avremmo la sfera sopra il cubo! Se ora non vi e' chiaro questo concetto, piu' avanti lo diventera'. Ora la telecamera e' correttamente definita:
to:
e bisogna dire quale e' l'alto e il basso per la telecamera. Se l'alto per esempio e' come vediamo le immagini, la sfera sara' a sinistra e il cubo a destra; se l'alto e' in basso avremo la sfera a destra e il cubo a sinistra. Se l'alto fosse a sinistra, avremmo la sfera sopra il cubo! Se ora non vi e' chiaro questo concetto, piu' avanti lo diventera'. Ora la telecamera e' correttamente definita:
Added lines 71-75:

Ora dobbiamo pensare alla superficie bidimensionale che intercetta la proiezione della scena verso la telecamera, questa rappresenta lo schermo del PC. Questa superficie e' rettangolare, ha un'altezza, una larghezza e una distanza dalla telecamera, molte volte questa distanza e' chiamata ''fuoco''. La superficie bidimensionale e' sempre ortogonale al vettore della direzione della visuale e parallela al vettore che indica il sopra:

Attach:3d5.png

June 17, 2014, at 03:14 PM by Massimiliano Vessi -
Added lines 63-71:

La posizione della telecamera non basta per definirla correttamente, dobbiamo anche definire dove guarda, la cosiddetta '''Direzione della visuale'''  (in inglese DOF):

Attach:3d3.png

e bisogna dire quale e' l'alto e il basso per la telecamera. Se l'alto per esempio e' come vediamo le immagini, la sera sara' a sinistra e il cubo a destra; se l'alto e' in basso avremo la sfera a destra e il cubo a sinistra. Se l'alto fosse a sinistra, avremmo la sfera sopra il cubo! Se ora non vi e' chiaro questo concetto, piu' avanti lo diventera'. Ora la telecamera e' correttamente definita:

Attach:3d4.png

June 17, 2014, at 03:03 PM by Massimiliano Vessi -
Changed line 56 from:
Iniziamo con l'immaginare una scena con un oggetto da rappresentare sullo schermo, ad esempio un cubo rosso (tutte le immagini seguenti sono viste dall'alto):
to:
Iniziamo con l'immaginare una scena con un oggetto da rappresentare sullo schermo, ad esempio un cubo rosso e una sfera blu (tutte le immagini seguenti sono viste dall'alto):
June 17, 2014, at 03:00 PM by Massimiliano Vessi -
Changed lines 56-57 from:
Iniziamo con l'immaginare una scena con un oggetto da rappresentare sullo schermo, ad esempio un cubo rosso:
to:
Iniziamo con l'immaginare una scena con un oggetto da rappresentare sullo schermo, ad esempio un cubo rosso (tutte le immagini seguenti sono viste dall'alto):
Added lines 60-62:
ora dobbiamo posizionare la telecamera (in inglese ''camera''):

Attach:3d2.png
June 17, 2014, at 02:56 PM by Massimiliano Vessi -
Changed lines 56-58 from:
Iniziamo con l'immaginare una scena con un oggetto da rappresentare sullo schermo
to:
Iniziamo con l'immaginare una scena con un oggetto da rappresentare sullo schermo, ad esempio un cubo rosso:

Attach:3d1.png
June 17, 2014, at 02:16 PM by Massimiliano Vessi -
Added lines 52-56:
!Come passare dal 3D al 2D

Lo schermo del PC e' una superficie piana a due dimensioni, mentre uno spazio tridimensionale ne ha tre: come facciamo a perdere una dimensione senza fare un pasticcio?  Bisogna andare per gradi per capire il procedimento.

Iniziamo con l'immaginare una scena con un oggetto da rappresentare sullo schermo
June 17, 2014, at 01:31 PM by Massimiliano Vessi -
Added lines 49-52:

Se avessimo scritto le equazioni in forma normale per ogni coordinata, non sarebbe bastata una pagina intera formato A4.

June 17, 2014, at 01:28 PM by Massimiliano Vessi -
Changed lines 42-43 from:

Scalare
to:
Per scalare i punti, cioe' avvicinarli o allontanarli dall'origine, questa e' la matrice:

{$ ((a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}

Ora vediamo come è semplice combinare tutte le operazioni insieme, vedete come con la notazione matriciale è molto compatta

{$ ((1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)) * ((1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)) * ((cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)) * ((cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)) * ((a,0,0,0),(0,b,0,0),(0,0,c,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}

June 17, 2014, at 01:23 PM by Massimiliano Vessi -
Changed lines 30-31 from:
La matrice per la rotazione intorno all'asse X e' la seguente:
to:
La matrice per la rotazione intorno all'asse X di un angolo {$ alpha $} e' la seguente:
Changed lines 34-35 from:
La matrice per la rotazione intorno all'asse Y e' la seguente:
to:
La matrice per la rotazione intorno all'asse Y di un angolo {$ beta $} e' la seguente:
Added lines 37-40:

La matrice per la rotazione intorno all'asse Z di un angolo {$ gamma $} e' la seguente:

{$ ((cos(gamma),-sin(gamma),0,0),(sin(gamma),cos(gamma),0,0),(0,0,1,0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
June 17, 2014, at 01:08 PM by Massimiliano Vessi -
Added line 29:
Added lines 34-36:
La matrice per la rotazione intorno all'asse Y e' la seguente:

{$ ((cos(beta),0,sin(beta),0),(0,1,0,0),(-sin(beta),0,cos(beta),0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
June 17, 2014, at 01:05 PM by Massimiliano Vessi -
Changed line 31 from:
{$ ((1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(aplha),cos(alpha),0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
to:
{$ ((1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(alpha),cos(alpha),0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
June 17, 2014, at 01:04 PM by Massimiliano Vessi -
Added lines 28-35:
Per le rotazioni la questione e' piu' spinosa, qualunque rotazione, per quanto complessa, puo' essere scomposta come una somma di rotazioni attorno ai tre assi principali (x,y,z), quindi c'e' una matrice di da applicare per la rotazione su ogni asse.
La matrice per la rotazione intorno all'asse X e' la seguente:

{$ ((1,0,0,0),(0,cos(alpha),-sin(alpha),0),(0,sin(aplha),cos(alpha),0),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}



Scalare
June 17, 2014, at 12:55 PM by Massimiliano Vessi -
Changed line 24 from:
Ora vediamo le traslazioni. Abbiamo una traslazione quando voglio spostare un punto (P1_X_,P1_Y_,P1_Z_) di una certa distanza che puo' essere scomposta lungo le tre direzioni (d_x,d_y_,d_z_) e dopo la traslazione il punto si ritrovera' in una nuova posizione (P2_X_,P2_Y_,P2_Z_). In termini matriciali abbiamo la seguente operazione:
to:
Ora vediamo le traslazioni. Abbiamo una traslazione quando voglio spostare un punto (P1'_X_',P1'_Y_',P1'_Z_') di una certa distanza che puo' essere scomposta lungo le tre direzioni (d'_x_',d'_y_',d'_z_') e dopo la traslazione il punto si ritrovera' in una nuova posizione (P2'_X_',P2'_Y_',P2'_Z_'). In termini matriciali abbiamo la seguente operazione:
June 17, 2014, at 12:54 PM by Massimiliano Vessi -
Added lines 23-26:

Ora vediamo le traslazioni. Abbiamo una traslazione quando voglio spostare un punto (P1_X_,P1_Y_,P1_Z_) di una certa distanza che puo' essere scomposta lungo le tre direzioni (d_x,d_y_,d_z_) e dopo la traslazione il punto si ritrovera' in una nuova posizione (P2_X_,P2_Y_,P2_Z_). In termini matriciali abbiamo la seguente operazione:

{$ ((1,0,0,d_x),(0,1,0,d_y),(0,0,1,d_z),(0,0,0,1)) * ((P1_X ),(P1_Y ),(P1_Z ), (1)) = ((P2_X) ,(P2_Y),(P2_Z),(1)) $}
June 17, 2014, at 12:46 PM by Massimiliano Vessi -
Changed line 19 from:
Prima di tutto vediamo la matrice identita', questa matrice moltiplicata per le coordinate dei punti, li lascia inalterati, in termini matriciali:
to:
Prima di tutto vediamo la matrice identita', questa matrice moltiplicata per le coordinate dei punti, li lascia inalterati. La matrice identita' ha tutti 1 sulla diagonale principale e 0 in tutte le altre posizioni. In termini matriciali si puo' scrivere:
June 17, 2014, at 12:44 PM by Massimiliano Vessi -
Changed lines 19-22 from:
to:
Prima di tutto vediamo la matrice identita', questa matrice moltiplicata per le coordinate dei punti, li lascia inalterati, in termini matriciali:


{$  ((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1) )  * ((X),(Y),(Z),(1)) = ((X),(Y),(Z),(1)) $}
June 17, 2014, at 12:40 PM by Massimiliano Vessi -
Added lines 5-6:
!Concetti di base
Added lines 16-19:

!Trasformazioni geometriche

June 17, 2014, at 12:39 PM by Massimiliano Vessi -
Changed line 3 from:
E' stato un esercizio interessante per capire il funzionamento della grafica 3D e ho scritto i seguenti appunti per spiegare i funzionamenti base del 3D su i computer e ho decise di scrivere la seguente guida.
to:
E' stato un esercizio interessante per capire il funzionamento della grafica 3D e ho scritto i seguenti appunti per spiegare i funzionamenti base del 3D sui computer. ''Buona lettura''.
June 17, 2014, at 12:38 PM by Massimiliano Vessi -
Changed lines 3-4 from:
E' stato un esercizio interessante per capire il funzionamento della grafica 3D e ho scritto i seguenti appunti per spiegare i funzionamenti base del 3D su i computer.
to:
E' stato un esercizio interessante per capire il funzionamento della grafica 3D e ho scritto i seguenti appunti per spiegare i funzionamenti base del 3D su i computer e ho decise di scrivere la seguente guida.
Changed lines 9-13 from:
Nelle operazioni grafiche si usa quasi sempre la notazione delle matrice, perche' fa capire a colpo d'occhio cosa si fa. Una operazione fra matrici di una riga equivale sempre ad almeno tre lunghissime equazioni normali.
to:
Questa e'  una matrice 3x1 (tre righe ed una sola colonna). Nelle operazioni grafiche si usa quasi sempre la notazione matriciale, perche' fa capire a colpo d'occhio cosa si fa. Una equazione fra matrici di una sola riga equivale sempre ad almeno tre lunghissime equazioni normali: una per ogni coordinata. Scrivere in forma matriciale fa risparmiare tempo e capire piu' semplicemente.

Ora la questione si complica un pochino: per come sono costituite le matrici per le operazioni grafiche, cioe' di 4 righe e 4 colonne (4x4), serve che la matrice che indichi le coordinate dei nostri punti sia fatta almeno di 4 righe, altrimenti non e' possibile moltiplicarle correttamente tra loro. Per questo motivo si aggiunge un 1 che e' ininfluente sulle coordinate, ma permette di compiere correttamente le operazioni fra matrici. Ecco quindi come scrivere la matrice delle coordinate di un punto in grafica 3D:

{$ ((X),(Y),(Z),(1)) $}
June 17, 2014, at 12:31 PM by Massimiliano Vessi -
Added lines 8-9:

Nelle operazioni grafiche si usa quasi sempre la notazione delle matrice, perche' fa capire a colpo d'occhio cosa si fa. Una operazione fra matrici di una riga equivale sempre ad almeno tre lunghissime equazioni normali.
June 17, 2014, at 12:28 PM by Massimiliano Vessi -
Added lines 4-7:

Prima di tutto un po' di semplice geometria. Ogni punto dello spazio puo' essere rappresentato da tre coordinate X, Y, Z; che in forma matriciale si scrive:

{$ ((X),(Y),(Z)) $}
June 17, 2014, at 12:25 PM by Massimiliano Vessi -
Added lines 1-5:
Ho portato in Livecode una libreria 3D che era scritta in Rebol.

E' stato un esercizio interessante per capire il funzionamento della grafica 3D e ho scritto i seguenti appunti per spiegare i funzionamenti base del 3D su i computer.

''Continua....''

HomePage

Guide

Altro

Translate:

Pubblicità:

Licenza Creative Commons
DuckDuckGo

edit SideBar

edit TopNav

Blix theme adapted by David Gilbert, powered by PmWiki