Tutorial: MD2 #processing #realidad aumentada

Nota: Es necesario tener experiencia con realidad Aumentada. Si aún no lo has hecho entra al tutorial inicial. Aquí
Tambien es necesario saber como diseñar objetos md2. Entra aquí

 

Md2 es un tipo de formato que permite la animación interna de objetos 3d. Aunque lo usan muy pocos, processing puede asimilar muy bien sus funciones sin envidiar al entrañable DAE que por azares del destino no existe librería que la importe. Sí, efectivamente, no existe dicha librería que logre leer objetos collada, almenos por ahora no.

Debido a que la creatividad surge de la necesidad de expresarse. Meses atrás busqué la forma de proyectar animaciones  en realidad aumentada. Hoy les explicaré como desarrollarlo:

 

  • Primero necesitaremos una archivos: “GL_Vertex. java”, “MD2_Loader.java”, “MD2_Model.java”, “MD2_ModelState.java”, “Vector3.java” y finalmente el archivo pde. Cada uno de estos elemenos contiene una parte importante para la visualización del archivo md2. Si faltara alguno de ellos no se podría ejecutar el archivo.

Aquí les dejo los archivos correspondientes para que funcione el MD2 Loader. El autor es Peter Lager y liberó estos codigos hace algunos meses.  

No se preocupen si al descargarlo no se ve bien. Ahora les enseñaré como unirlo con realidad aumentada.

  • Una vez descargado el zip. Incorpora los elementos de Nyartoolkit y lo integraremos con los demas:

import processing.opengl.*;
import processing.video.*;
import jp.nyatla.nyar4psg.*;
import processing.opengl.*;
import javax.media.opengl.*;

  • Tambien llamaremos a las funciones

Capture cam;
NyARBoard marcador;
PMatrix3D dmat, dmatOrg;

float interpolate = 0;
boolean showWire = false;

PGraphics3D g3;

MD2_Loader loader;
MD2_Model model1;

  • Trabajaremos con el Void Setup.

void setup() {
size(600,420,OPENGL);
frameRate(60);
marcador=new NyARBoard(this,width,height,”camera_para.dat”,”patt.hiro”,80);
marcador.gsThreshold=100;
marcador.cfThreshold=0.4;

cam=new Capture(this,width,height);

loader = new MD2_Loader(this);

model1 = loader.loadModel(“models/ogro/iconoblender.md2”, “models/ogro/iconoblender.jpg”);

if(model1 != null){
MD2_ModelState[] mdlStates = model1.getModelStates();

for(int i = 0; i < mdlStates.length; i++){

}

}
if(model1 != null) model1.setState(9);

registerPre(this);
}

void pre(){
interpolate = PApplet.constrain(2.1/(frameRate + 0.01), 0.001, 0.8);
if(model1 != null)
model1.update(interpolate);

}

  • Trabajaremos con el Void Draw

void draw() {
if (cam.available() !=true) {
return;
}

cam.read();

hint(DISABLE_DEPTH_TEST);
image(cam,0,0);
hint(ENABLE_DEPTH_TEST);
if(marcador.detect(cam)) {

PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;

marcador.beginTransform(pgl);

pushMatrix();

if(showWire){

}
else {
noStroke();
fill(128);
}
if(model1 != null) model1.render();

popMatrix();

G4P.draw();
marcador.endTransform();
}
}

<p

Recibe toda la información necesaria sobre realidad aumentada y el mundo de la innovación. Descarga gratis material especial de nuestra comunidad.

20 Comments

  1. Krong Grubna February 1, 2011
  2. Joao April 5, 2011
    • Jon April 8, 2011
    • emilio vegas ubillus April 10, 2011
  3. Jesus June 4, 2011
    • emilio vegas ubillus June 4, 2011
      • EMILIO November 16, 2012
  4. Jesus June 4, 2011
    • emilio vegas ubillus June 4, 2011
  5. Jesus June 4, 2011
  6. SEBASNM June 11, 2011
    • emilio vegas ubillus June 16, 2011
  7. Thomas November 28, 2011
  8. Thomas November 28, 2011
    • emilio vegas ubillus December 4, 2011
  9. Thomas November 29, 2011
  10. EMILIO November 16, 2012
    • emilio vegas ubillus November 17, 2012
      • EMILIO November 20, 2012

Leave a Reply