# Trasformazioni di matrici ([name])

Three.js utilizza le `matrici` per codificare le trasformazioni 3D, traslazioni (posizione), rotazioni e ridimensionamento. Ogni istanza di [page:Object3D] ha una [page:Object3D.matrix matrice] che memorizza la posizione, la rotazione e il ridimensionamento. Questa pagina descrive come aggiornare la trasformazione di un oggetto.

## Proprietà di convenienza e `matrixAutoUpdate`

Ci sono due modi per aggiornare la trasformazione di un oggetto:

1. Modificare le proprietà `position`, `quaternion` e `scale` dell'oggetto e lasciare che three.js ricalcoli la matrice dell'oggetto da queste proprietà: `object.position.copy( start_position ); object.quaternion.copy( quaternion );` Per impostazione predefinita, la proprietà `matrixAutoUpdate` è impostata su true e la matrice viene ricalcolata automaticamente. Se l'oggetto è statico, o desideri controllare manualmente quando avviene il ricalcolo, è possibile ottenere prestazioni migliori se la proprietà è impostata a false. `object.matrixAutoUpdate = false;` E dopo aver modificato le proprietà, aggiornare manualmente la matrice: `object.updateMatrix();`
2. Modificare direttamente la matrice dell'oggetto. La classe [page:Matrix4] possiede vari metodi per modificare la matrice: `object.matrix.setRotationFromQuaternion( quaternion ); object.matrix.setPosition( start_position ); object.matrixAutoUpdate = false;` Nota che, in questo caso, `matrixAutoUpdate` deve essere impostata a `false`, e devi essere sicuro di non chiamare `updateMatrix`. La chiamata di `updateMatrix` eliminerà le modifiche manuali apportate alla matrice, ricalcolando la matrice da `position`, `scale`, e così via.

## Oggetto e matrici del mondo (world matrices)

La [page:Object3D.matrix matrice] dell'oggetto memorizza la trsformazione dell'oggetto relativa al [page:Object3D.parent genitore] dell'oggetto: per ottenere la trasformazione dell'oggetto nelle coordinate del mondo, è necessario accedere alla [page:Object3D.matrixWorld] dell'oggetto.

Quando la trasformazione dell'oggetto padre o dell'oggetto figlio cambia, puoi richiedere che la [page:Object3D.matrixWorld matrixWorld] dell'oggetto figlio venga aggiornata chiamando il metodo [page:Object3D.updateMatrixWorld updateMatrixWorld]().

## Rotazione e Quaternione

Three.js fornisce due modi per rappresentare le rotazioni 3D: [page:Euler angoli di Eulero] e [page:Quaternion Quaternioni], nonché metodi per la conversione tra i due. Gli angoli di Eulero sono soggetti ad un problema chiamato "gimbal lock", in cui alcune configurazioni possono perdere un grado di libertà (impedendo all'oggetto di essere ruotato su un asse). Per questo motivo, le rotazioni degli oggetti sono sempre memorizzate nei [page:Object3D.quaternion quaternioni] dell'oggetto.

Le versioni precedenti della libreria includevano una proprietà `useQuaternion` che, se impostata a false, faceva si che la [page:Object3D.matrix matrix] dell'oggetto fosse calcolata da un angolo di Eulero. Questa pratica è deprecata, si deve invece usare il metodo [page:Object3D.setRotationFromEuler setRotationFromEuler], il quale aggiornerà il quaternione.