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.
- 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.
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.getNamedAttribute
y convierta su contenido enFloatSpan
. - 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
PointAttribute
aDracoMesh
. - Agregue los índices del triángulo.
- Cree un objeto
DracoEncodeOptions
con 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