Java
210 pág.

Java


DisciplinaProgramação Orientada A Objetos3.948 materiais57.615 seguidores
Pré-visualização43 páginas
normais, texturas, etc...
Vértices
Primeiramente vamos criar um array do tipo short que irá armazenar os vértices X, Y e Z (nessa ordem) do nosso
triângulo.
 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;
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 minhaCamera = new Camera();
 minhaCamera.setPerspective(60.0f, 
(float)getWidth()/(float)getHeight(), 1.0f, 100.0f);
 meuMundo.addChild(minhaCamera);
 meuMundo.setActiveCamera(minhaCamera);
 short[] vetorVertices = {-1, 0, -1, -1, 0, 1, 1, 0, 
J2ME 93
-1}
 boolean gameOver = false;
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrance)();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
 }
Sabemos que o VertexArray pode guardar coisas como a posição dos vértices, normais, texturas, etc... no nosso caso
iremos criar um objeto para armazenar a posição dos vértices. Como parâmetros do construtor iremos entrar:
1.1. O número de vértices do VertexArray (como faremos um triângulo então teremos 3 vértices)
2.2. O número de componentes por vértice (nesse caso são 3, os eixos X, Y e Z).
3.3. O tamanho em bytes de cada componente (nesse caso 2, pois um short ocupa 2 bytes). OBS: O tamanho máximo
é 2.
 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;
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 minhaCamera = new Camera();
 minhaCamera.setPerspective(60.0f, 
(float)getWidth()/(float)getHeight(), 1.0f, 100.0f);
 meuMundo.addChild(minhaCamera);
J2ME 94
 meuMundo.setActiveCamera(minhaCamera);
 short[] vetorVertices = {-1, 0, -1, -1, 0, 1, 1, 0, 
-1}
 VertexArray arrayDePosicoes = new VertexArray(3, 3, 2);
 boolean gameOver = false;
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrance)();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
 }
Criamos o array dos vértices e criamos também o objeto do tipo VertexArray. Agora iremos colocar o array
vetorVertices que criamos dentro do objeto VertexArray para isso iremos usar o método set() onde iremos entrar 3
parâmetros:
1.1. O primeiro vértice do vetor vertices (nesse caso e quase sempre será zero)
2.2. O número de vértices do VertexArray (como faremos um triângulo então teremos 3 vértices).
3. O vetor de vértices (o que criamos short[] vertices).
 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;
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
J2ME 95
 minhaCamera = new Camera();
 minhaCamera.setPerspective(60.0f, 
(float)getWidth()/(float)getHeight(), 1.0f, 100.0f);
 meuMundo.addChild(minhaCamera);
 meuMundo.setActiveCamera(minhaCamera);
 short[] vetorVertices = {-1, 0, -1, -1, 0, 1, 1, 0, 
-1}
 VertexArray arrayDePosicoes = new VertexArray(3, 3, 2);
 arrayDePosicoes.set(0, 3, vetorVertices);
 boolean gameOver = false;
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrance)();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
 }
Normais
A exemplo do anterior primeiramente criamos um array do tipo short que agora irá armazenar a posição das noemais
de cada vértice (127-padrão, 0-sem normal, -127-invertido) nesse caso como fizemos um triângulo plano vamos setar
a normal padrão para o eixo Y (virado para cima).
 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;
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
J2ME 96
 meuThread.start();
 }
 public void run(){
 minhaCamera = new Camera();
 minhaCamera.setPerspective(60.0f, 
(float)getWidth()/(float)getHeight(), 1.0f, 100.0f);
 meuMundo.addChild(minhaCamera);
 meuMundo.setActiveCamera(minhaCamera);
 short[] vetorVertices = {-1, 0, -1, -1, 0, 1, 1, 0,
 -1}
 VertexArray arrayDePosicoes = new VertexArray(3, 3, 2);
 arrayDePosicoes.set(0, 3, vetorVertices);
 short[] vetorNormais = {0, 127, 0, 0, 127, 0, 0, 
127, 0}
 boolean gameOver = false;
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrance)();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
 }
Agora vamos criar o objeto VertexArray com os mesmos atributos no construtor (número de vertices do
VextexArray, o numero de componentes de cada vértice, o tamanho em bytes de cada componente).
 import javax.microedition.lcdui.*;
 import javax.microedition.m3g.*;
 import javax.microedition.game.*;
 public class ClasseMeuGameCanvas extends GameCanvas implements 
Runnable {
 Thread meuThread;
 Graphics meuGrafico