1. Home
  2.   Drako
  3.   FileFormat.Drako für Java
FileFormat.Drako für Java

FileFormat.Drako für Java

 
 

Vereinfachen Sie den Prozess des Lesens und Schreibens von Google Draco-Dateien mit der Java-API

Bearbeiten Sie komprimierte DRC-Dateien mühelos mit FileFormat.Drako, einer leichten Open-Source-Java-API, die die Konvertierung und Automatisierung von Draco-Dateien optimiert

FileFormat.Drako für Java revolutioniert Ihr Draco-Dateiverarbeitungserlebnis. In diesem umfassenden Leitfaden befassen wir uns mit den Funktionen und Vorteilen der Nutzung von FileFormat.Drako, einer leichten Open-Source-Java-API, um Draco-Dateien mühelos zu verarbeiten.

Draco ist eine von Google entwickelte Open-Source-Komprimierungsbibliothek, die auf die Komprimierung und Dekomprimierung von 3D-geometrischen Netzen und Punktwolken spezialisiert ist. Durch die deutliche Reduzierung der Größe von 3D-Grafikdateien ermöglicht Draco eine schnellere Übertragung und reduziert den Speicherbedarf bei gleichzeitiger Beibehaltung der visuellen Qualität. Es unterstützt verschiedene 3D-Anwendungen, einschließlich webbasierter und mobiler Plattformen, und gewährleistet so eine effiziente Handhabung komplexer 3D-Daten. Draco wird häufig in Branchen wie Gaming, Virtual Reality und 3D-Visualisierung eingesetzt, um die Leistung zu optimieren und das Benutzererlebnis zu verbessern.

FileFormat.Drako erweist sich als leistungsstarke Lösung zum nahtlosen Lesen und Schreiben von Draco-Dateien. Diese leichte Open-Source-Java-API vereinfacht Draco-Bildoperationen und bietet Entwicklern und Benutzern eine benutzerfreundliche Oberfläche für die mühelose Handhabung von Draco-Dateien.

FileFormat.Drako ist unter der MIT-Lizenz verfügbar.

Hauptfunktionen und Vorteile

  • Hohe Komprimierungsraten: Draco erreicht eine erhebliche Reduzierung der Dateigrößen, oft um bis zu 90 % ohne merklichen Verlust an visueller Qualität. Dies macht es ideal für Anwendungen, bei denen Bandbreite und Speicher begrenzt sind.
  • Unterstützung für verschiedene Datentypen: Draco unterstützt die Komprimierung für eine Vielzahl von 3D-Datentypen, einschließlich Geometrienetzen und Punktwolken. Es kann Scheitelpunktpositionen, Farben, Normalen und andere Attribute effizient verarbeiten.
  • Schnelle Komprimierung und Dekomprimierung: Die Bibliothek ist für eine schnelle Komprimierung und Dekomprimierung konzipiert und eignet sich daher für Echtzeitanwendungen wie webbasierte 3D-Viewer und Virtual-Reality-Erlebnisse.
  • Open Source und kostenlos: Genießen Sie die Vorteile einer Open-Source-Lösung ohne Lizenzgebühren und machen Sie sie für Entwickler und Benutzer aller Ebenen zugänglich.
  • Nahtlose Integration mit Java-Anwendungen: Integrieren Sie FileFormat.Drako mühelos in Ihre Java-Anwendungen und ermöglichen Sie so eine nahtlose Draco-Dateiverarbeitung innerhalb Ihrer bestehenden Arbeitsabläufe.

Previous Next

Erste Schritte mit FileFormat.Drako für Java

Der Einstieg in FileFormat.Drako ist schnell und einfach. Befolgen Sie einfach diese Schritte:

  • InstallFileFormat.Drako: Installieren Sie das FileFormat.Drako-Paket über Maven oder Gradle.
  • Konvertierung starten: Nutzen Sie die einfache API von FileFormat.Drako, um Draco-Dateien zu lesen und zu schreiben.

Die empfohlene Methode zur Installation von FileFormat.Drako für Java ist die Verwendung von Maven. Bitte verwenden Sie für eine reibungslose Installation das folgende POM-Abhängigkeits-Snippet.

POM-Snippet


<dependency>
  <groupId>dev.fileformat</groupId>
  <artifactId>drako</artifactId>
  <version>1.4.1</version>
</dependency>
 
Sie können es auch direkt von GitHub herunterladen.

Draco-Datei in DracoMesh in Java einlesen

Dieses Code-Snippet lädt effizient eine Draco-Datei und speichert sie für nachfolgende Vorgänge in einer DracoMesh-Instanz.

  • Öffnen Sie die DRC-Datei mit dem Namen „cube.drc“ mit Files.readAllBytes.
  • Laden Sie das 3D-Netz aus den Bytes in ein DracoMesh-Objekt.

Kopieren Sie den folgenden Codeausschnitt, fügen Sie ihn in Ihre Hauptdatei ein und führen Sie das Programm aus.

DRC-Datei in DracoMesh-Instanz lesen

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

Draco-Datei lesen und in Wavefront OBJ in Java schreiben

Der folgende Code veranschaulicht, wie eine vorhandene 3D-Draco-Datei geöffnet und zur weiteren Verarbeitung in das OBJ-Format geschrieben wird:

  • Öffnen Sie die Draco-Datei mit dem Namen „input.drc“ mit Files.readAllBytes.
  • Laden Sie das Draco-Mesh aus den Bytes in ein DracoMesh-Objekt.
  • Suchen Sie das Positionsattribut mit DracoMesh.getNamedAttributeund wandeln Sie seinen Inhalt in FloatSpanum.
  • Schreiben Sie Kontrollpunkte im OBJ-Format in die Ausgabe.
  • Lesen Sie die Ecken jeder Fläche mit DracoMesh.readFace
  • Ordnen Sie die Gesichtsecken mit PointAttribute.mappedIndexdem Index der Kontrollpunkte zu.
  • Schreiben Sie Gesichter im OBJ-Format in die Ausgabe.

Kopieren Sie den folgenden Codeausschnitt, fügen Sie ihn in Ihre Hauptdatei ein und führen Sie das Programm aus.

DRC-Datei in DracoMesh lesen und in Wavefront-Objekt exportieren

 
  //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));
          }
      }
  }

Kontrollpunkte und Dreiecke programmgesteuert in Java in eine Draco-Datei kodieren

Der bereitgestellte Code zeigt, wie man programmgesteuert eine Draco-Datei aus Kontrollpunkten und Dreiecken erstellt und diese mit Java als „output.drc“ speichert. Hier ist eine Aufschlüsselung der Schritte:

  • Erstellen Sie eine DracoMesh-Instanz.
  • Kontrollpunkte in PointAttributeumschließen.
  • Fügen Sie das PointAttributezu DracoMeshhinzu.
  • Fügen Sie die Dreiecksindizes hinzu.
  • Erstellen Sie ein DracoEncodeOptions-Objekt mit den angegebenen Codierungsparametern.
  • Kodieren Sie das Netz mit Draco.encodein Bytes.

Kopieren Sie den folgenden Codeausschnitt, fügen Sie ihn in Ihre Hauptdatei ein und führen Sie das Programm aus.

Vektoren und Flächen in eine .drc-Datei kodieren

 
  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 bietet eine intuitive API, umfassende Formatunterstützung und nahtlose Integration mit Java-Anwendungen und ermöglicht Entwicklern und Benutzern gleichermaßen die mühelose Verwaltung von Draco-Dateien. Egal, ob Sie Draco-Dateien in andere Dateien konvertieren oder Draco zum Rendern laden, FileFormat.Drako vereinfacht den Prozess und sorgt bei jedem Schritt für optimale Effizienz und Qualität.

Erkunden Sie unser GitHub-Repository, um Beiträge zu leisten, Verbesserungen vorzuschlagen und diese Open-Source-API zu verbessern: FileFormat.Drako- für Java

 Deutsch