# J2ME/Lições/M3G/Modificando objetos 3D

Vamos entrar agora na parte de modificação dos objetos .m3g carregados no J2ME, vamos utilizar isso através do objeto for tipo World que criamos, na verdade esse objeto servirá como uma ponte de ligação entre o programador e os nódulos do objeto 3D em si.

### Translação de um objeto

Vamos inicialmente aprender como translatar um nódulo do objeto 3D, quando se fala em translação você deve pensar em um movimento giratório que a Terra faz no sol, no mundo 3D não é bem assim, na verdade a translação nada mais é que a posição dos eixos x, y, z dentro do espaço.
Primeiramente vamos translatar a câmera que você criou e armazenou no arquivo .m3g, para isso vamos criar um objeto do tipo Camera e inicializa-lo.
Criamos a variável minhaCamera, mas nenhuma câmera foi colocada lá, agora vamos fazer isso através do nosso objeto do tipo World, utilizando o método getActiveCamera.
Agora com a câmera armazanada vamos movimenta-la, para isso só precisamos pegar emprestado da classe World o método setTranslation que irá receber 3 variáveis float, que serão respectivamente o eixo x, y e z.

### Pegando a translação de um objeto

Vamos ver agora como pegar a translação (posição dentro do mundo) de um objeto, vamos usar o mesmo exemplo anterior.
Vamos pegar a posição X, Y e Z da câmera, para isso vamos inicialmente criar um array float de 3 posições chamado posicaoCamera, e inicia-lo com 0.
Agora dentro do loop principal vamos usar o método getTranslation e entrar como parâmetro a variável float que criamos que vai pegar os 3 atributos X, Y e Z nessa ordem, como saída vamos dar um System.out.println para exibir cada posição.

### Orientação de um objeto

Vamos agora ver como orientar (rotacionar) um objeto 3D, vamos fazer como anteriormente, carregar o objeto, coloca-lo no objeto World e colocar a câmera na classe Camera.
Vamos agora utilizar o método setOrientation e entrar como parâmetro respectivamente o angulo, o componente de roatação X, o componente de roatação Y e o componente de roatação Z. Esses componentes de rotação se colocados como 0 não irão alterar o eixo de rotação.
No exemplo a câmera irá girar 10 graus no eixo X, 20 graus no eixo Y, e 0 graus no eixo Z.

### Pegando a orientação de um objeto

Vamos ver agora como pegar a orientação de um objeto, vamos usar o mesmo exemplo anterior.
Vamos pegar a rotação X, Y e Z da câmera, para isso vamos inicialmente criar um array float agora de 4 posições chamado orientacaoCamera, e inicia-lo com 0.
Agora dentro do loop principal vamos usar o método getOrientation e entrar como parâmetro a variável float que criamos que vai pegar os 4 atributos, como saída vamos dar um System.out.println para exibir cada um.

### Pegando um objeto específico

O World no M3G pode conter várias câmeras, meshes, luzes, etc, vamos ver aqui como pegar cada um desses objetos. Primeiramente é bom no seu editor 3D nomear cada objeto com um número, quando esse arquivo for salvo ficará mais fácil de você pegar a identificação do objeto através de um número inteiro.
Primeiramente vamos pegar os exemplos anteriores.
Agora vamos criar o objeto Node, que é o objeto que pode pegar a referência de uma câmera, mesh, luz, etc...
Agora vamos usar o método getChild no objeto World e entrar como parâmetro a idêntificação do objeto selecionado.
Agora usamos normalmente os métodos para modificar o Node, nesse caso vamos move-lo usando translate.

### Animando um objeto 3D

Você colocou um objeto 3D para ser mostrado no seu aplicativo, mas se você criou um objeto animado deve ter notado que o objeto não expressou nenhum quadro da animação. Para fazer isso vamos usar o método animate da classe World e receber como parâmetro, uma variavel int que irá incrementar a cada frame.
Agora vamos chamar o método animate e como parâmetro colocar uma variavel para a contagem do frame para a animação do objeto.