Visualizando Collada (DAE) en processing

Los objetos animados como los collada (DAE) son uno de los temas más interesantes a la hora de trabajar con processing. ¿Se puede visualizar? ¿Se puede mantener la animación de los objetos 3d sin problemas? Años atrás en emiliusvgs teníamos esa duda porque queríamos trabajar animaciones para realidad aumentada. El problema: los formatos de objetos 3D (obj, dae, kmz, 3ds) muchas veces suelen ser incompatibles con processing.

Han pasado seis años que resolvimos el problema con otro formato poco desconocido pero aún vigente por comunidades pequeñas: El MD2 que se originó en los juegos simples de windows. ¿Ahora que la tecnología ha evolucionado también lo ha hecho la comunidad de 3D + PROCESSING?

La respuesta simple sería la siguiente: Sí ha evolucionado dicha comunidad pero no como se esperaba. La razón fundamental es que la misma comunidad depende de la actividad de los usuarios. Si estos no trabajan para un proyecto en común, las actividades no se desarrollan. Existía un proyecto llamado polymonkey collada loader, del desarrollador Matt Ditton (@polymonkey)poly-monkey-collada-processing

Funcionaba la librería a un 50%. El proyecto siguió “vivo” a través de su web que hoy ya no existe.

Luego en el 2012 apareció una librería llamada Collada Loader for Sketchup and blender de Markus Zimmermann. El autor tiene actualizado la librería hasta diciembre del 2015 y corre perfectamente con processing 3. Es la librería más profesional para importar imagenes en DAE.

collada-processing-3d

 

Instalar collada loader / blender para processing

La librería está dentro de la selección de descargas para processing. Solo debemos ir hacia sketch -> importar librería -> collada loader

collada-importar-libreria-processing

Al instalar la librería, reiniciamos y actualizamos processing. Para ver el proyecto en vivo vamos hacia Archivo -> ejemplo -> biblioteca -> collada…

collada-ejemplo

El proyecto es simple, pero lamentablemente no hay animación y en todo caso no me funcionan las “interacciones” dentro del sketch. Por ello hemos hecho un archivo más simple para trabajar el contenido.  El código es el siguiente.

El código

 

import java.util.List;
import java.util.Properties;

import ch.dieseite.colladaloader.ColladaLoader;
import ch.dieseite.colladaloader.wrappers.ColladaModel;
import ch.dieseite.colladaloader.wrappers.Triangle;


/**
 * <p>The Idea of this code is a 3D presentation of some dae
 * or kmz examples from sketchup 8 or Blender 2.75a. This code is an untested
 * part because my platform does not support P3D/P2D from Processing.
 * Created files from other versions is not tested either.
 * </p>
 *
 * <p>This source is free; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License and by nameing of the originally author</p>
 *
 * @author Markus Zimmermann <a href="http://www.die-seite.ch">http://www.die-seite.ch</a>
 * @version 3.1
 */

      //****************************
      //choose here which example you want (one or more)

      boolean modelsEnabled[] = new boolean[]{false,false,false,false,false,true,false};

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

    ColladaModel[] models = new ColladaModel[modelsEnabled.length];

    void settings() {
          size(750,750,P3D); //switch on GL 
    }
      
      void setup()
    {
          lights();
          frameRate(250);

           
         
         
          Properties optionals = new Properties();
          optionals.setProperty("LinkingSchema", "Blender"); //blender parsing profile
//         optionals.setProperty("option_no_texture", "true"); //spares image loadings
//          optionals.setProperty("debuglevel", "4"); //4 = extreme details 3 = details, 2 = medium, 1 = abstract , 0 = none (default)

         //Blender formated file (to see it: scale bigger)
         //a transparent skull (triangles only)
           if (modelsEnabled[4]) models[4] = ColladaLoader.load("halloween_crystal.dae",this,optionals);
          //same skull but textured (triangles only)
          if (modelsEnabled[5]) models[5] = ColladaLoader.load("halloween_textured.dae",this,optionals);
          //same skull as grid (lines only)
          if (modelsEnabled[6]) models[6] = ColladaLoader.load("halloween_grid_only.dae",this,optionals);



    }

      void draw(){
         
          background(200);
         
          translate(190, 350, 20);
          rotateX(-0.048000026f);
          rotateY(-0.32000035f);
          scale(19.5f);
 
                   
          
          //now draw the model
          for (int i = 0; i< modelsEnabled.length; i++)
          {
              if(modelsEnabled[i])
              {
                     models[i].draw();
              }
          }

    }

 

En el ejemplo actual con la versión de processing 3.2 no es posible visualizar la interacción. No es posible generar alguna animación simple. Intenté con diferentes objetos animados 3D y no ha sido posible proyectar. Estaré conversando con el desarrollador para transmitirle mis dudas! Quizá con processing js será la solución para implementar todas las librería y procesos disponibles. Quizá ya exista realidad aumentada con javascript…

Gracias por acompañarme en la aventura 😉

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

2 Comments

  1. Luis Jimenez January 19, 2017

Leave a Reply