123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- <!DOCTYPE html>
- <html lang="it">
- <head>
- <meta charset="utf-8">
- <base href="../../../" />
- <script src="page.js"></script>
- <link type="text/css" rel="stylesheet" href="page.css" />
- </head>
- <body>
- <h1>Trasformazioni di matrici ([name])</h1>
- <p>
- 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.
- </p>
- <h2>Proprietà di convenienza e `matrixAutoUpdate`</h2>
- <p>
- Ci sono due modi per aggiornare la trasformazione di un oggetto:
- </p>
- <ol>
- <li>
- Modificare le proprietà `position`, `quaternion` e `scale` dell'oggetto e lasciare che three.js ricalcoli la
- matrice dell'oggetto da queste proprietà:
- <code>
- object.position.copy( start_position );
- object.quaternion.copy( quaternion );
- </code>
- 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.
- <code>
- object.matrixAutoUpdate = false;
- </code>
- E dopo aver modificato le proprietà, aggiornare manualmente la matrice:
- <code>
- object.updateMatrix();
- </code>
- </li>
- <li>
- Modificare direttamente la matrice dell'oggetto. La classe [page:Matrix4] possiede vari metodi per modificare la matrice:
- <code>
- object.matrix.setRotationFromQuaternion( quaternion );
- object.matrix.setPosition( start_position );
- object.matrixAutoUpdate = false;
- </code>
- Nota che, in questo caso, `matrixAutoUpdate` <em>deve</em> essere impostata a `false`, e devi essere sicuro di <em>non</em> chiamare `updateMatrix`.
- La chiamata di `updateMatrix` eliminerà le modifiche manuali apportate alla matrice, ricalcolando la matrice da `position`, `scale`, e così via.
- </li>
- </ol>
- <h2>Oggetto e matrici del mondo (world matrices)</h2>
- <p>
- La [page:Object3D.matrix matrice] dell'oggetto memorizza la trsformazione dell'oggetto <em>relativa</em> al [page:Object3D.parent genitore] dell'oggetto:
- per ottenere la trasformazione dell'oggetto nelle coordinate del <em>mondo</em>, è necessario accedere alla [page:Object3D.matrixWorld] dell'oggetto.
- </p>
- <p>
- 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]().
- </p>
- <h2>Rotazione e Quaternione</h2>
- <p>
- 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 <em>sempre</em> memorizzate nei [page:Object3D.quaternion quaternioni] dell'oggetto.
- </p>
- <p>
- 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.
- </p>
- </body>
- </html>
|