1. Home
  2.   Drako
  3.   FileFormat.Drako per Java
FileFormat.Drako per Java

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 Openize.

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.

Previous Next

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>org.openize</groupId>
  <artifactId>drako</artifactId>
  <version>1.4.0</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.getNamedAttributee trasforma il suo contenuto in FloatSpan.
  • 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 PointAttributea DracoMesh.
  • Aggiungi gli indici dei triangoli.
  • Crea un oggetto DracoEncodeOptionscon 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

 Italiano