Java
210 pág.

Java


DisciplinaProgramação Orientada A Objetos3.889 materiais57.128 seguidores
Pré-visualização43 páginas
System.out.println(posicaoCamera[2]);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
}
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.
 //arquivo ClasseMeuCanvas.java
 import java.io.*;
 import javax.microedition.lcdui.*;
 import javax.microedition.m3g.*;
 public class ClasseMeuCanvas extends GameCanvas implements Runnable {
 Thread meuThread;
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 ClasseMeuCanvas(){
 super(false)
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 while(gameOver == false){
 try {
J2ME 112
 meuGrafico3D.bindTarget(meuGrafico);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
 }
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.
 //arquivo ClasseMeuCanvas.java
 import java.io.*;
 import javax.microedition.lcdui.*;
 import javax.microedition.m3g.*;
 public class ClasseMeuCanvas extends GameCanvas implements Runnable {
 Thread meuThread;
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 ClasseMeuCanvas(){
 super(false)
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 minhaCamera.setOrientation(10, 1, 2, 0);
J2ME 113
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
 }
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.
import javax.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import javax.microedition.game.*;
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
J2ME 114
 if (meuMundo != null) {
 minhaCamera.setOrientation(10.0f, 0.0f, 1.0f, 
2.0f);
 meuGrafico3D.render(meuMundo);
 }
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
}
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.
import javax.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import javax.microedition.game.*;
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 float[] orientacaoCamera = {0.0, 0.0, 0.0, 0.0};
J2ME 115
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 if (meuMundo != null) {
 minhaCamera.setOrientation(10.0f, 0.0f, 1.0f, 
2.0f);
 meuGrafico3D.render(meuMundo);
 }
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
}
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.
import javax.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import javax.microedition.game.*;
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();