1. Home
  2.   Drako
  3.   Formato de archivo.Drako para Java
FileFormat.Drako para Java

Formato de archivo.Drako para Java

 
 

Simplifique el proceso de lectura y escritura de archivos Google Draco utilizando la API de Java

Edite fácilmente archivos DRC comprimidos con FileFormat.Drako, una API de Java liviana y de código abierto, que simplifica la conversión y automatización de archivos Draco

FileFormat.Drako para Java revoluciona su experiencia de procesamiento de archivos Draco. En esta guía completa, profundizamos en las funcionalidades y beneficios de aprovechar FileFormat.Drako, una API Java liviana de código abierto, para manejar archivos Draco con facilidad y sin esfuerzo.

Draco es una biblioteca de compresión de código abierto desarrollada por Google que se especializa en comprimir y descomprimir mallas geométricas 3D y nubes de puntos. Al reducir significativamente el tamaño de los archivos de gráficos 3D, Draco permite una transmisión más rápida y reduce los requisitos de almacenamiento manteniendo la calidad visual. Admite varias aplicaciones 3D, incluidas plataformas móviles y basadas en web, lo que garantiza un manejo eficiente de datos 3D complejos. Draco se utiliza ampliamente en industrias como la de juegos, realidad virtual y visualización 3D para optimizar el rendimiento y mejorar la experiencia del usuario.

FileFormat.Drako surge como una poderosa solución para leer y escribir archivos Draco sin problemas. Esta API Java liviana de código abierto simplifica las operaciones de imágenes de Draco, ofreciendo a los desarrolladores y usuarios una interfaz fácil de usar para manejar archivos Draco sin esfuerzo.

FileFormat.Drako está disponible en MIT License.

Características y beneficios clave

  • Altos índices de compresión: Draco logra una reducción significativa en el tamaño de los archivos, a menudo reduciéndolos hasta en un 90% sin una pérdida notable en la calidad visual. Esto lo hace ideal para aplicaciones donde el ancho de banda y el almacenamiento son limitados.
  • Compatibilidad con varios tipos de datos: Draco admite la compresión para una amplia gama de tipos de datos 3D, incluidas mallas geométricas y nubes de puntos. Puede manejar posiciones de vértices, colores, normales y otros atributos de manera eficiente.
  • Compresión y descompresión rápidas: la biblioteca está diseñada para ofrecer compresión y descompresión de alta velocidad, lo que la hace adecuada para aplicaciones en tiempo real, como visores 3D basados ​​en web y experiencias de realidad virtual. li>
  • Código abierto y gratuito: disfrute de los beneficios de una solución de código abierto sin tarifas de licencia, haciéndola accesible para desarrolladores y usuarios de todos los niveles.
  • Integración perfecta con aplicaciones Java: IntegreFileFormat.Drako sin esfuerzo en sus aplicaciones Java, lo que permite una gestión perfecta de archivos Draco dentro de sus flujos de trabajo existentes.

Previous Next

Cómo empezar con FileFormat.Drako para Java

Comenzar a utilizar FileFormat.Drako es rápido y fácil. Simplemente sigue estos pasos:

  • InstallFileFormat.Drako: instale el paquete FileFormat.Drako a través de Maven o Gradle.
  • Comience a convertir: utilice la API simple proporcionada por FileFormat.Drako para leer y escribir archivos Draco.

La forma recomendada de instalar FileFormat.Drako para Java es utilizar maven. Utilice el siguiente fragmento de dependencia de pom para una instalación sin problemas.

Fragmento de POM


<dependency>
  <groupId>dev.fileformat</groupId>
  <artifactId>drako</artifactId>
  <version>1.4.1</version>
</dependency>
 
También puedes descargarlo directamente desde GitHub.

Leer el archivo Draco en DracoMesh en Java

Este fragmento de código carga eficientemente un archivo Draco y lo almacena en una instancia de DracoMesh para operaciones posteriores.

  • Abra el archivo DRC llamado "cube.drc" usando Files.readAllBytes.
  • Cargue la malla 3D de los bytes en un objeto DracoMesh.

Copie y pegue el siguiente fragmento de código en su archivo principal y ejecute el programa.

Leer el archivo .drc en la instancia de DracoMesh

 
    byte[] cube = Files.readAllBytes(Paths.get("cube.drc"));
    DracoMesh dm = (DracoMesh)Draco.decode(cube);

Leer el archivo Draco y escribir en Wavefront OBJ en Java

El siguiente código ilustra cómo abrir un archivo Draco 3D existente y escribirlo en formato obj para su posterior procesamiento:

  • Abra el archivo Draco llamado "input.drc" usando Files.readAllBytes.
  • Cargue la malla Draco desde los bytes en un objeto DracoMesh.
  • Encuentre el atributo de posición usando DracoMesh.getNamedAttributey convierta su contenido en FloatSpan.
  • Escribir puntos de control en la salida usando el formato OBJ.
  • Lea las esquinas de cada cara usando DracoMesh.readFace
  • Asigne las esquinas de la cara al índice de puntos de control usando PointAttribute.mappedIndex.
  • Escribe caras en la salida usando el formato OBJ.

Copie y pegue el siguiente fragmento de código en su archivo principal y ejecute el programa.

Leer el archivo .drc en DracoMesh y exportarlo a wavefront obj

 
  //load draco file
  byte[] bytes = Files.readAllBytes(Paths.get("input.drc"));
  DracoMesh mesh = (DracoMesh)Draco.decode(bytes);
  if (mesh == null)
      throw new IllegalStateException("Input file is not a valid draco file.");
  PointAttribute attrPos = mesh.getNamedAttribute(AttributeType.POSITION);
  FloatSpan points = attrPos.getBuffer().asSpan().asFloatSpan();
  
  try(FileOutputStream fos = new FileOutputStream("output.obj", false)) {
      try (OutputStreamWriter writer = new OutputStreamWriter(fos)) {
          for (int i = 0; i < points.size(); i += 3) {
              writer.write(String.format("v %f %f %f\n", points.get(i), points.get(i + 1), points.get(i + 2)));
          }
          int[] face = new int[3];
          for (int i = 0; i < mesh.getNumFaces(); i++) {
              mesh.readFace(i, face);
              int a = attrPos.mappedIndex(face[0]) + 1;
              int b = attrPos.mappedIndex(face[1]) + 1;
              int c = attrPos.mappedIndex(face[2]) + 1;
              writer.write(String.format("f %d %d %d\n", a, b, c));
          }
      }
  }

Codificar puntos de control y triángulos en un archivo Draco de forma programática en Java

El código proporcionado demuestra cómo crear mediante programación un archivo Draco a partir de puntos de control y triángulos, y guardarlo como "output.drc" usando Java. Aquí hay un desglose de los pasos:

  • Crea una instancia de DracoMesh.
  • Ajustar puntos de control a PointAttribute.
  • Agregue el PointAttributea DracoMesh.
  • Agregue los índices del triángulo.
  • Cree un objeto DracoEncodeOptionscon los parámetros de codificación especificados.
  • Codifique la malla en bytes usando Draco.encode.

Copie y pegue el siguiente fragmento de código en su archivo principal y ejecute el programa.

Codificar vectores y caras en un archivo .drc

 
  Vector3[] controlPoints = new Vector3[]
  {
          new Vector3( -5, 0, 5.0f),
          new Vector3( 5, 0, 5.0f),
          new Vector3( 5, 10, 5.0f),
          new Vector3( -5, 10, 5.0f),
          new Vector3( -5, 0, -5.0f),
          new Vector3( 5, 0, -5.0f),
          new Vector3( 5, 10, -5.0f),
          new Vector3( -5, 10, -5.0f)
  };

  int[] indices = new int[]
  {
          0,1,2, 0, 2, 3, // Front face (Z+)
          1,5,6, 1, 6, 2, // Right side (X+)
          5,4,7, 5, 7, 6, // Back face (Z-)
          4,0,3, 4, 3, 7, // Left side (X-)
          0,4,5, 0, 5, 1, // Bottom face (Y-)
          3,2,6, 3, 6, 7 // Top face (Y+)
  };

  DracoMesh mesh = new DracoMesh();
  PointAttribute attrPos = PointAttribute.wrap(AttributeType.POSITION, controlPoints);
  mesh.addAttribute(attrPos);
  //add triangle indices
  mesh.getIndices().addRange(indices);
  //number of the control points, it's required for the encoder to produce correct result.
  mesh.setNumPoints(8);
  //You can also use following methods to deduplicate the attributes to reduce the file size
  //mesh.deduplicateAttributeValues();
  //mesh.deduplicatePointIds();
  DracoEncodeOptions opt = new DracoEncodeOptions();
  byte[] drcBytes = Draco.encode(mesh, opt);

  Files.write(Paths.get("output.drc"), drcBytes);


FileFormat.Drako ofrece una API intuitiva, compatibilidad integral con formatos e integración perfecta con aplicaciones Java, lo que permite a los desarrolladores y usuarios administrar archivos Draco sin esfuerzo. Ya sea que esté convirtiendo archivos draco en otros archivos o cargando draco para renderizar, FileFormat.Drako simplifica el proceso y garantiza una eficiencia y calidad óptimas en cada paso.

Explore nuestro repositorio de GitHub para contribuir, sugerir mejoras y mejorar esta API de código abierto: FileFormat.Drako- para Java

 Español