# Transformações de matriz

Three.js usa `matrizes` para codificar transformações 3D --- translações (posição), rotações e dimensionamento. Cada instância de [page:Object3D] tem uma [page:Object3D.matrix matriz] (matrix) que armazena a posição, rotação e escala. Esta página descreve como atualizar a transformação de um objeto.

## Propriedades de conveniência e `matrixAutoUpdate`

Existem duas maneiras de atualizar a transformação de um objeto:

1. Modifique as propriedades `position`, `quaternion` e `scale` do objeto e deixe o three.js recalcular a matriz do objeto a partir destas propriedades: `object.position.copy( start_position ); object.quaternion.copy( quaternion );` Por padrão, a propriedade `matrixAutoUpdate` é definida como verdadeira e a matriz será recalculada automaticamente. Se o objeto é estático, ou você deseja controlar manualmente quando ocorre o recálculo, um melhor desempenho pode ser obtido configurando a propriedade false: `object.matrixAutoUpdate = false;` E depois de alterar qualquer propriedade, atualize manualmente a matriz: `object.updateMatrix();`
2. Modifique a matriz do objeto diretamente. A classe [page:Matrix4] tem vários métodos para modificar a matriz: `object.matrix.setRotationFromQuaternion( quaternion ); object.matrix.setPosition( start_position ); object.matrixAutoUpdate = false;` Observe que `matrixAutoUpdate` deve ser definido como `false` neste caso, e você deve ter certeza de não chamar `updateMatrix`. Chamar `updateMatrix` irá destruir as alterações manuais feitas na matriz, recalculando a matriz de `position`, `scale` e assim por diante.

## Objeto e matrizes mundo (world matrices)

A [page:Object3D.matrix matriz] (matrix) de um objeto armazena a transformação do objeto relativa ao objeto [page:Object3D.parent pai] (parent); para obter a transformação do objeto em coordenadas mundo, deve-se acessar a [page:Object3D.matrixWorld] do objeto.

Quando a transformação do objeto pai ou filho muda, você pode solicitar que a [page:Object3D.matrixWorld matrixWorld] do objeto filho seja atualizada chamando [page:Object3D.updateMatrixWorld updateMatrixWorld]().

## Rotação e Quaternion

Three.js fornece duas maneiras de representar rotações 3D: [page:Euler Euler angles] e [page:Quaternion Quaternions], bem como métodos para converter entre os dois. Os ângulos de Euler estão sujeitos a um problema chamado "gimbal lock", onde certas configurações podem perder um grau de liberdade (impedindo que o objeto seja girado em torno de um eixo). Por esta razão, as rotações do objeto são sempre armazenadas no objeto [page:Object3D.quaternion quaternion].

As versões anteriores da biblioteca incluíam uma propriedade `useQuaternion` que, quando definida como false, faria com que a [page:Object3D.matrix matrix] do objeto fosse calculada a partir de um ângulo de Euler. Essa prática está obsoleta --- em vez disso, você deve usar o método [page:Object3D.setRotationFromEuler setRotationFromEuler], que atualizará o quaternion.