Este post viene gracias a un colaborador del blog. Se llama Alfonso Moreno y es un desarrollador para Iphone. Gracias a su aporte y a mi «experiencia» en trabajar con obj para processing hemos llegado a la conclusión, si es que no sale otra mejor, que OBJ Import es la librería más estable y ligera que tiene processing para fusionar 3d con realidad aumentada.

Al igual que Flaartoolkit que permite desde sus inicios fusionar 3d sin ningún problema, processing con java logra realizar lo mismo y  sin restarle importantes funciones.

Alfonso decidió brindar el código :

// 2010 – Alfonso Moreno
// http://diarowm.wordpress.com

import objimp.*;

ObjImpScene scene2;

/*******************************************/
void setup() {

size(800,600,OPENGL);

try
{
scene2 = new ObjImpScene( this );
scene2.load( dataPath(«tour.obj»), 0.5 );

} catch( Exception e )
{
println( e );
System.exit( 0 );
}
}

/********************************************/

void draw() {
background(200);

scene2.draw();

}

Está demás decir que para los ejemplos de realidad aumentada utilizo nyartoolkit.

34 COMMENTS

  1. Buenas,

    Emilio tienes alguna idea de como se podria hacer para desactivar y activar los markers? Es decir que pueda elegir cuando se veria el objeto y cuando no, enfocando el marker con la cam poder decidir cuando sale el objeto y cuando no.

  2. Buenas Emilio!!!

    Ya he conseguido que se activen y desactiven los markers cuando deseo. El processing sigo sin poder meterlo aun en eclipse me da un error en la libreria QTJAVA pero bueno he desistido. Ahora estoy con modelos 3D tengo una vaca t un robot jeje. Ya te pasare algun video cuando lo haga.

    Saludos

    • eso de la vaca y el robot me parece interesante! jajaajaja. Yo importo OBJ en processing. con la librería OBJloader 🙂 descargalo, te lo recomiendo

  3. hice una prueba e intente cargar un OBJ colocandole el mismo nombre que el del ejemplo y me genera el siguiente error:

    Error, could not load obj:C:UsersfliaxDesktopNyAR2exampleNyARTesttestdatatour.obj

    cual creen que seria la razon?

    gracias de antemano

    • Hola el problema puede ser que no has ruteado bien el objeto 3d, es decir, quizas no esté en la misma carpeta donde yo tengo el objeto 3d.
      Crea una carpeta Data en donde estás haciendo tu sketch y coloca el OBJ y el MTL.

      Y prueba de nuevo 🙂

      Gracias por visitar mi blog

  4. gracias por la respuesta, pero no creo que sea por la ruta, veras… donde tengo el sketch tengo las siguientes carpetas

    * code
    – NyAR2.jar
    – NyARToolkit.jar
    – objimport.jar
    * data
    – camera_para.dat
    – patt.hiro
    – tour.mtl
    – tour.obj

    la verdad no tengo ni idea por que el error

    java.lang.ArrayIndexOutOfBoundsException: 2
    at com.obj.parser.obj.FaceParser.parseLine(FaceParser.java:96)
    at com.obj.parser.obj.FaceParser.parseQuad(FaceParser.java:108)
    at com.obj.parser.obj.FaceParser.parse(FaceParser.java:37)
    at com.obj.WavefrontObject.parseLine(WavefrontObject.java:178)
    at com.obj.WavefrontObject.parse(WavefrontObject.java:148)
    at com.obj.WavefrontObject.(WavefrontObject.java:88)
    at com.obj.WavefrontObject.(WavefrontObject.java:54)
    at objimp.ObjImpScene.load(ObjImpScene.java:84)
    at objimp.ObjImpScene.load(ObjImpScene.java:78)
    at test.setup(test.java:105)
    at processing.core.PApplet.handleDraw(Unknown Source)
    at processing.core.PApplet.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:619)
    Error, could not load obj:C:UsersfliaxDesktopNyAR2exampleNyARTesttestdatatour.obj

    disculpa el largo del comentario pero a lo mejor asi puedas tener una mejor idea.
    gracias

    • Pues por lo visto, tienes todo en orden… mmm Quizás debes probar con otro objeto 3d.
      Has probado Nyartoolkit por sí solo? Si es así, el problema debe ser del OBJ
      Avisame el resultado.

    • Hola! Él codigo está hecho para que las personas pensantes puedan fusionar el código con el de nyartoolkit. En otras palabras no está hecho para personas que quieren sólo copiar y pegar el trabajo de otros sin saber preguntar ni indigar en el tema. Te agradecería que tengas la capacidad mental de poder preguntar como se debe.

      Saludos!

    • Hola Emilio,

      Leyendo este post solucione el problema que tenia con las texturas, no estaba incluyendo el .mtl del modelo 3D en el proyecto.

      En definitivo son mas las calificaciones positivas a tu blog, que este tipo de comentarios por parte de «yo». Al cual invito a que investigue un poco y no sea tan facilista por no decir que mediocre.

      Saludos.

      • Es cierto Alberto! Yo acepto todo tipo de críticas siempre y cuando sean alturadas y orientadas a mejorar

        Saludos! 🙂

  5. Gracias por el laburo de compartir esto.
    Tengo una pregunta!

    Tengo un objeto 3d modelado en 3dmax.
    Cómo lo encajo en el código?

    sería en esta línea? cambiando «tour.obj» por el nombre de mi archivo?

    scene2.load( dataPath(“tour.obj”), 0.5 )

    Espero me puedas ayudar! un abrazo

    • Hola merlin. Si así es. Esa linea es donde cambias por tu archivo. No te olvides de incorporar tu archivo 3d al sketch para que al nombrarlo corra bien.

      Saludos!

  6. mi objeto 3d está en .dei
    así me sirve?

    scene2.load( dataPath(“miobjeto.dei”), 0.5 )

    o hay una forma de exportarlo desde 3d max como .obj?

    y por último… el pattern (ese cuadradito que se imprime) cómo lo genero para que me tome MI objeto?

    muchísimas gracias de antemano!

    • Hola Merlin. Tu objeto debe estar en formato OBJ, porque la librería que usamos en este ejmplo es para trabajar con ese formato. Con dei no he visto que processing trabaje.

  7. import objimp.*;

    ObjImpScene scene2;

    /*******************************************/
    void setup() {

    size(800,600,OPENGL);

    try
    {
    scene2 = new ObjImpScene( this );
    scene2.load( dataPath(«miobjeto.obj»), 0.5 );

    } catch( Exception e )
    {
    println( e );
    System.exit( 0 );
    }
    }

    /********************************************/

    void draw() {
    background(200);

    scene2.draw();

    }

    me tira error, qué me estaría faltando?
    me descargue la librería nyar y la OBJimport

  8. no tengo idea cómo fusionar el código este con nyar

    para el patt uso el patthiro impreso que trae la carpeta de nyar no?

    otra cosa, el archivo de mi 3d lo tengo que tener dentro de la carpeta: objimport/examples/loadobj/data

    es así?

    si hice todo bien lo único que necesito es implementarle al código que vos nos das, el código de nyar

    ayuda!

  9. Hola que tal me parece muy interesante tu blog, una pregunta hay que guardar en algun lugar especial la carpeta de OBJimport y que version de processing me recomiendas? yq eu hay unos released que apenas salieron que parecen tener errores pequeños. gracias excelente tu blog

    • Hola.La carpeta OBJimport va en libraries de processing. Aunque puedes insertar siempre en cada sketch las librerías que quieres tan solo arrastrando hacia la ventana. Te recomiendo 1.5.1 de processing que es el más estable.

      Saludos

  10. no me manda ningun error, pero no carga el objeto, le quite el background por que al poner el marker se ponia toda la pantalla azul, que puede ser?

    • ya lo resolvi, era que el obj se cargaba muy pequeño y no lo veia, pero ahora lo carga sin textura. me dice esto:
      Could not load path ‘C:UsersEmilioDocumentsProcessingnuevo_objdataC:UsersEmilioDownloadstexture.jpg’

  11. Saludos Emilio, he estado tratando de correr el ejemplo de indicado en tu blog: http://emiliusvgs.com/2010/06/04/3d-processing-ar/ Sin embargo no he podido hacer funcionar el ejemplo. Ya he logrado hacer funcionar los ejemplos básicos con 1 marcador y 2 marcadores, pero al intentar cargar un objeto .obj me indica el siguiente error:

    Exception in thread «Animation Thread» java.lang.AssertionError
    at jp.nyatla.nyar4psg.PImageRaster.wrapBuffer(PImageRaster.java:66)
    at jp.nyatla.nyar4psg.MultiMarker$PImageSensor.update(MultiMarker.java:79)
    at jp.nyatla.nyar4psg.MultiMarker.detectWithoutLoadPixels(MultiMarker.java:357)
    at jp.nyatla.nyar4psg.MultiMarker.detect(MultiMarker.java:346)
    at obj_prueba.draw(obj_prueba.java:79)
    at processing.core.PApplet.handleDraw(Unknown Source)
    at processing.core.PApplet.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:722)

    Sistema Operativo Ubuntu 12.10 64 Bits

    Dejo mi sketch para le des un ojo.
    import javax.media.opengl.*;
    import processing.opengl.*;
    import codeanticode.gsvideo.*;
    import jp.nyatla.nyar4psg.*;
    import objimp.*;

    GSCapture cam;
    MultiMarker nya;
    ObjImpScene scene2;

    void setup() {
    size(800,600,OPENGL);

    colorMode(RGB, 100);
    println(MultiMarker.VERSION);
    cam=new GSCapture(this,640,480);
    nya=new MultiMarker(this,width,height,»camera_para.dat»,NyAR4PsgConfig.CONFIG_PSG);
    nya.addARMarker(«patt.hiro»,80);
    cam.start();

    try
    {
    scene2 = new ObjImpScene( this );
    scene2.load( dataPath(«mono.obj»), 0.5 );

    } catch( Exception e )
    {
    println( e );
    System.exit( 0 );
    }

    }

    void draw()
    {
    if (cam.available() !=true) {
    return;
    }
    cam.read();
    nya.detect(cam);
    background(0);

    nya.drawBackground(cam);//frustum
    if((!nya.isExistMarker(0))){
    return;
    }
    nya.beginTransform(0);
    fill(0,0,255);
    translate(0,0,20);
    box(40);
    nya.endTransform();

    scene2.draw();

    }

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.