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.comimport 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.
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.
Hola Rafa. Si existe una soluciòn para eso. Se llama el multimarker AR. http://www.cleoag.ru/2009/12/04/multiple-ar-markers-library-for-processing/
Yo no lo he podido probar porque el Jmyron tiene conflictos con windows 🙁
Saludos
Esta muy chido tu blog
gracias adrian! 🙂
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
Haber si me puedes pasar algun modelo 3D para probarlooo
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
No te olvides de descargar el OBJimport, la librería para usar 3d en processing y también Nyartoolkit 🙂
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.
si al parecer era por el objeto 3D.
gracias por el aporte y la ayuda 😉
Qué bueno que ya funcione tu sketch 🙂
PON LOS CODIGOS BIEN O NO LOS PONGAS
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! 🙂
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!
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.
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
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!
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
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’
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();
}
En estos días te respondo
Disculpa que ando ocupado!
Gracias por escribir
Que tal, prueba cambiando el tamaño del size al mismo tamaño del objeto cam,
Lo tienes así: size(800,600,OPENGL);
Colócalo así: size(640,480,OPENGL);
De esa manera me funciono a mi.
Saludos.
.
Cambia size(800,600,OPENGL);
Por size(640,480,OPENGL); que es el tamaño que tienes en tu objeto cam.
Así me funciono a mi.
Saludos.