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




Deja un comentario