Un archivo 3ds

 

 

Meses atrás, escribí un post sobre el multimarker con nyartoolkit. A raíz de este tutorial, me han llovido preguntas sobre cómo se inserta con objetos 3d  (obj/3ds)

Presentaré otra alternativa más intuita y usada por muchos programadores. Por cosas de simplicidad, aquí lo llamaremos: M-nyar. Hice un pequeño sondeo entre 10 personas expertas en temas de modelado en 3d y processing; y 7 de ellos usan M-nyar.

Si más preambulos aquí les va la explicación:

  • Importar librerías

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

  • Llamar librerías

Capture cam;
NyARMultiBoard nya;
V3dsScene vscene;
V3dsScene vscene2;

  • Usamos public void para llamar a las instancias de la clase

public void setup() {
size(640,480,OPENGL);
colorMode(RGB, 100);

  • Agregamos la cámara y los string para usar distintos marcadores y características

cam=new Capture(this,width,height,24);
String[] patts = {
«patt.hiro», «patt.e»
};

double[] widths = {
80,80
};
nya=new NyARMultiBoard(this,width,height,»camera_para.dat»,patts,widths);
print(nya.VERSION);

nya.gsThreshold=120;
nya.cfThreshold=0.4;

  • Es momento de agregar los objetos 3d

try
{

vscene = new V3dsScene (this, «ARCHIVO.3ds»);
vscene.useMaterial( true );

vscene2 = new V3dsScene (this, «ARCHIVO.3ds»);
vscene2.useMaterial( true );

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

  • Nuevamente usamos un public, en esta ocasión es:

public void draw() {
background(200);
if (cam.available() ) {
cam.read();
}

  • Luego le agregamos las cosas esenciales de nyartoolkit

background(255);
hint(DISABLE_DEPTH_TEST);
image(cam,0,0);
hint(ENABLE_DEPTH_TEST);

if (nya.detect(cam))
{
hint(ENABLE_DEPTH_TEST);

PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;
for (int i=0; i < nya.markers.length; i++)
{
if (nya.markers[i].detected)
{
nya.markers[i].beginTransform(pgl);

  • Finalmente cerramos las llamadas de los objetos 3d

if (i == 0)
{
vscene.draw();
}

else
{
vscene2.draw();
}
nya.markers[i].endTransform();
}
}
}
}

[youtube=http://www.youtube.com/watch?v=EDsaxRf6bgE]

29 COMMENTS

  1. ok he llegado dandole vueltas hasta aqui…
    y ahora no me encuentra los patts…

    cam=new Capture(this,width,height,24);
    String[] patts = {
    “patt.hiro”, “patt.kanji”

    no puede seeer!! ajj

  2. ok. nice. i’ve been looking for nyarpsg documentation (in english) but i can’t find anything. do you know where i would be able to find it?

    also, i’m having a problem in this code line:
    (…)
    if (nya.detect(cam))
    (…)

    the camera works but nya.detect(cam) always returns false. do you know why this is happening?

    thanks 🙂

  3. Gracias!

    Al fin conseguí hacer el multimarker…

    funciona genial !

    esto es fantástico…

    lo único q no me sale.. aunque retocar el código se ve fácil…

    poner más de 3 markers .. se puede?

  4. Te paso un link con mi blog…
    hay ejemplos de lo que he hecho 😉

    http://starbusker.blogspot.com/

    tambien la web… aunque solo es de 3d…

    http://www.alx3d.com

    Como veréis los modeloss tienen sobre la textura un mapa de «occlusion»… que son las ( auto sombras ) de un objeto…

    com maya se puede generar un render de una textura en lugar de un render normal de imagen, para después componerla en photoshop sobre la textura del color…
    los modelos quedan muy bien con este truquillo 😉

    • Me gusta tu página y he visto el ejemplo que pones donde tu hermano está practicando realidad aumentada. Si tienes fotos de algo de realidad aumentada en la que hayas aprendido aquí, me gustaría verlo.

      Saludos!

      • bueno lo que estoy intentando ahora es triplicar
        los muñequitos esos q se ven abajo de la foto de mi hermano ( jejej )…

        Se ven bonito.. pero si tubiera más de uno podría hacer… un juego de damas x ejemplo

        el caso, es que retoco el código
        añadiendo V3dsScene; etc…

        pero me salta un error

  5. jeje estoy haciendo progresos… genial!
    ya vereis…

    lo único q al importar el objeto 3ds en processing , no viene con la animacón…

    y el objeto 3ds la tiene! por que lo vuelvo a abrir en max y está animado … que raro?

  6. Hola, oye, tengo una gran duda… en donde pondria los comandos para que cuando presione una tecla, suceda algo y mas especifico que se mueva de posicon?

    saludos

  7. Hola tengo una consulta, como se pueden rotar los elementos 3ds, yo los exporto desde 3d max como 3ds pero al momento de visualizar en processing quedan de lados

  8. En primer lugar agradecer tus tutoriales, son fantásticos. Trabajocon processing en mac osx y el código ejemplo me funciona perfectamente, pero necesito crear mis propios marcadores y el programa flash web que indicas: http://flash.tarotaro.org/blog/2008/12/14/artoolkit-marker-generator-online-released/
    me crea un .pat que processing no reconoce tan bien como el patt.hiro. Sabes cuál es el problema? puedo generar un patt.?

    TE AGRADECERÍA MUCHÍSIMO TU RESPUESTA porque llevo casi una semana intentandolo

    • Hola Manuel disculpa que no te haya respondido tan rápido. El problema de que no se visualice tanto es posiblemente por el dibujo del marcador. Debe ser cuadrada y en el medio tener, si deseas, un distintivo.

      Saludos

    • Hola Mike que buen dato lo de el colladaloader! Es una buen solución.

      Si haces algo, no dudes en enviarmelo en mi correo quizá lo lanzo como un post con todo los créditos posibles jejeje

      Yo tb voy a investigar sobre ese tema!

      Saludos!

  9. Hola Emilio, el objimport tiene su propio ejemplo, lo ejecuto y funciona OK. Ahora hice un pequeño cubito, lo deforme un poquito y lo puse en el ejemplo PERO:

    Loaded OBJ from file ‘D:DOCUMENTOSProcessingobjimportexamplesloadobjdatacubito.obj’
    129 vertices.
    0 normals.
    0 textures coordinates.
    Exception in thread «Animation Thread» java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at objimp.ObjImpScene.draw(ObjImpScene.java:301)

    A que crees que se deba, ojo que todo está en su sitio, la exportación se hizo como indicas en tu video.

    GRACIAS DESDE YA…

    • SOLUCIONADO: Resulta que al momento de exportar desde blender hay que marcar también la opción «normals» y listo…
      BLENDER 2.57b

  10. Me olvidaba, para trabajar con «animaciones intrinsecas» osea hechas con el mismo blender, cual es la mejor exportación: OBJ, COLLADE, MD2, 3DS ???

    Gracias nuevamente.

    • Hola Jesus! Que bueno que hayas resuelto tu problema! Creo que para hacer eso es la escena en 3d que ya viene con la inclusión de la luz y el efecto de la sombra. Prueba yo creo que si funcionaría 😀

Deja un comentario

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