FileFormat.Drako per Java
Semplifica il processo di lettura e scrittura dei file Google Draco utilizzando l'API Java
Modifica senza sforzo i file DRC compressi con FileFormat.Drako, un'API Java leggera e open-source che semplifica la conversione e l'automazione dei file Draco
FileFormat.Drako per Java rivoluziona la tua esperienza di elaborazione dei file Draco. In questa guida completa, approfondiamo le funzionalità e i vantaggi derivanti dall'utilizzo diFileFormat.Drako, una leggera API Java open source, per gestire facilmente i file Draco.
Draco è una libreria di compressione open source sviluppata da Google specializzata nella compressione e decompressione di mesh geometriche 3D e nuvole di punti. Riducendo significativamente la dimensione dei file grafici 3D, Draco consente una trasmissione più rapida e riduce i requisiti di archiviazione mantenendo la qualità visiva. Supporta varie applicazioni 3D, comprese piattaforme mobili e basate sul Web, garantendo una gestione efficiente di dati 3D complessi. Draco è ampiamente utilizzato in settori quali i giochi, la realtà virtuale e la visualizzazione 3D per ottimizzare le prestazioni e migliorare l'esperienza dell'utente.
FileFormat.Drako emerge come una potente soluzione per leggere e scrivere senza problemi file Draco. Questa leggera API Java open source semplifica le operazioni sulle immagini Draco, offrendo agli sviluppatori e agli utenti un'interfaccia intuitiva per gestire i file Draco senza sforzo.
FileFormat.Drako è disponibile con Licenza MIT.
Caratteristiche e vantaggi principali- Rapporti di compressione elevati: Draco ottiene una significativa riduzione delle dimensioni dei file, spesso riducendoli fino al 90% senza una notevole perdita di qualità visiva. Ciò lo rende ideale per le applicazioni in cui la larghezza di banda e lo spazio di archiviazione sono limitati.
- Supporto per vari tipi di dati: Draco supporta la compressione per un'ampia gamma di tipi di dati 3D, incluse mesh geometriche e nuvole di punti. Può gestire le posizioni dei vertici, i colori, le normali e altri attributi in modo efficiente.
- Compressione e decompressione rapida: la libreria è progettata per offrire compressione e decompressione ad alta velocità, rendendola adatta per applicazioni in tempo reale come visualizzatori 3D basati sul Web ed esperienze di realtà virtuale.
- Open Source e gratuito: goditi i vantaggi di una soluzione open source senza costi di licenza, rendendola accessibile a sviluppatori e utenti di tutti i livelli.
- Integrazione perfetta con le applicazioni Java: integra facilmenteFileFormat.Drako nelle tue applicazioni Java, consentendo una gestione perfetta dei file Draco all'interno dei flussi di lavoro esistenti.
- Rapporti di compressione elevati: Draco ottiene una significativa riduzione delle dimensioni dei file, spesso riducendoli fino al 90% senza una notevole perdita di qualità visiva. Ciò lo rende ideale per le applicazioni in cui la larghezza di banda e lo spazio di archiviazione sono limitati.
- Supporto per vari tipi di dati: Draco supporta la compressione per un'ampia gamma di tipi di dati 3D, incluse mesh geometriche e nuvole di punti. Può gestire le posizioni dei vertici, i colori, le normali e altri attributi in modo efficiente.
- Compressione e decompressione rapida: la libreria è progettata per offrire compressione e decompressione ad alta velocità, rendendola adatta per applicazioni in tempo reale come visualizzatori 3D basati sul Web ed esperienze di realtà virtuale.
- Open Source e gratuito: goditi i vantaggi di una soluzione open source senza costi di licenza, rendendola accessibile a sviluppatori e utenti di tutti i livelli.
- Integrazione perfetta con le applicazioni Java: integra facilmenteFileFormat.Drako nelle tue applicazioni Java, consentendo una gestione perfetta dei file Draco all'interno dei flussi di lavoro esistenti.
Come iniziare con FileFormat.Drako per Java
Iniziare con FileFormat.Drako è semplice e veloce. Segui semplicemente questi passaggi:
- InstallFileFormat.Drako: installa il pacchetto FileFormat.Drako tramite Maven o Gradle.
- Avvia la conversione: utilizza la semplice API fornita da FileFormat.Drako per leggere e scrivere file Draco.
Il modo consigliato per installareFileFormat.Drako per Java è utilizzare maven. Utilizza il seguente snippet di dipendenza pom per un'installazione fluida.
Frammento POM
<dependency>
<groupId>dev.fileformat</groupId>
<artifactId>drako</artifactId>
<version>1.4.1</version>
</dependency>
Puoi anche scaricarlo direttamente da GitHub.Leggi il file Draco in DracoMesh in Java
Questo frammento di codice carica in modo efficiente un file Draco e lo archivia in un'istanza DracoMesh per le operazioni successive.
- Apri il file DRC denominato "cube.drc" utilizzando
Files.readAllBytes
. - Carica la mesh 3D dai byte in un oggetto
DracoMesh
.
Copia e incolla lo snippet di codice sottostante nel file principale ed esegui il programma.
Leggi il file .drc nell'istanza DracoMesh
byte[] cube = Files.readAllBytes(Paths.get("cube.drc"));
DracoMesh dm = (DracoMesh)Draco.decode(cube);
Leggi il file Draco e scrivi su Wavefront OBJ in Java
Il codice seguente illustra come aprire un file Draco 3D esistente e scrivere nel formato obj per un'ulteriore elaborazione:
- Apri il file Draco denominato "input.drc" utilizzando
Files.readAllBytes
. - Carica la mesh Draco dai byte in un oggetto
DracoMesh
. - Trova l'attributo position utilizzando
DracoMesh.getNamedAttribute
e trasforma il suo contenuto inFloatSpan
. - Scrivi punti di controllo sull'output utilizzando il formato OBJ.
- Leggi gli angoli di ogni faccia utilizzando
DracoMesh.readFace
- Mappa gli angoli della faccia sull'indice dei punti di controllo utilizzando
PointAttribute.mappedIndex
. - Scrivi i volti nell'output utilizzando il formato OBJ.
Copia e incolla lo snippet di codice sottostante nel file principale ed esegui il programma.
Leggi il file .drc su DracoMesh ed esportalo su 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));
}
}
}
Codifica punti di controllo e triangoli nel file Draco in modo programmatico in Java
Il codice fornito dimostra come creare a livello di codice un file Draco da punti di controllo e triangoli e salvarlo come "output.drc" utilizzando Java. Ecco una ripartizione dei passaggi:
- Crea un'istanza
DracoMesh
. - Avvolgi i punti di controllo in
PointAttribute
. - Aggiungi
PointAttribute
aDracoMesh
. - Aggiungi gli indici dei triangoli.
- Crea un oggetto
DracoEncodeOptions
con i parametri di codifica specificati. - Codifica la mesh in byte utilizzando
Draco.encode
.
Copia e incolla lo snippet di codice sottostante nel file principale ed esegui il programma.
Codifica vettori e volti nel file .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 offre un'API intuitiva, supporto completo dei formati e integrazione perfetta con le applicazioni Java, consentendo sia agli sviluppatori che agli utenti di gestire facilmente i file Draco. Che tu stia convertendo file draco in altri file o caricando draco per il rendering, FileFormat.Drako semplifica il processo, garantendo efficienza e qualità ottimali in ogni passaggio.
Esplora il nostro repository GitHub per contribuire, suggerire miglioramenti e potenziare questa API open source: FileFormat.Drako- per Java