You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
3.7 KiB
78 lines
3.7 KiB
<!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>
|
|
|