1. Home
  2.   Drako
  3.   FileFormat.Drako для Java
FileFormat.Drako для Java

FileFormat.Drako для Java

 
 

Упростите процесс чтения и записи файлов Google Draco с помощью API Java

Легко редактируйте сжатые файлы DRC с помощью FileFormat.Drako, легкого API Java с открытым исходным кодом, упрощающего конвертацию и автоматизацию файлов Draco

FileFormat.Drako для Java радикально меняет ваш опыт обработки файлов Draco. В этом подробном руководстве мы рассмотрим функциональные возможности и преимущества использования FileFormat.Drako, легкого Java API с открытым исходным кодом, позволяющего легко и просто обрабатывать файлы Draco.

Draco — это библиотека сжатия с открытым исходным кодом, разработанная Google и специализирующаяся на сжатии и распаковке трехмерных геометрических сеток и облаков точек. Значительно уменьшая размер файлов 3D-графики, Draco обеспечивает более быструю передачу и снижает требования к хранению, сохраняя при этом качество изображения. Он поддерживает различные 3D-приложения, в том числе веб-платформы и мобильные платформы, обеспечивая эффективную обработку сложных 3D-данных. Draco широко используется в таких отраслях, как игры, виртуальная реальность и 3D-визуализация, для оптимизации производительности и улучшения пользовательского опыта.

FileFormat.Drako представляет собой мощное решение для удобного чтения и записи файлов Draco. Этот легкий Java API с открытым исходным кодом упрощает операции с изображениями Draco, предлагая разработчикам и пользователям удобный интерфейс для легкой обработки файлов Draco.

FileFormat.Drako доступен по открытой лицензии.

Основные особенности и преимущества

  • Высокая степень сжатия. Draco обеспечивает значительное уменьшение размеров файлов, часто уменьшая их до 90 % без заметной потери визуального качества. Это делает его идеальным для приложений, где пропускная способность и объем памяти ограничены.
  • Поддержка различных типов данных. Draco поддерживает сжатие широкого спектра типов 3D-данных, включая геометрические сетки и облака точек. Он может эффективно обрабатывать позиции вершин, цвета, нормали и другие атрибуты.
  • Быстрое сжатие и распаковка. Библиотека предназначена для обеспечения высокоскоростного сжатия и распаковки, что делает ее подходящей для приложений реального времени, таких как веб-средства просмотра 3D-изображений и виртуальная реальность.
  • Быстрое сжатие и распаковка. ли>
  • Открытый исходный код и бесплатно. Воспользуйтесь преимуществами решения с открытым исходным кодом без лицензионных сборов, что делает его доступным для разработчиков и пользователей всех уровней.
  • Бесшовная интеграция с приложениями Java: легко интегрируйте FileFormat.Drako в ваши приложения Java, обеспечивая беспрепятственную обработку файлов Draco в существующих рабочих процессах.

Previous Next

Как начать работу с FileFormat.Drako для Java

Начать работу с FileFormat.Drako можно быстро и легко. Просто выполните следующие действия:

  • InstallFileFormat.Drako: установите пакет FileFormat.Drako через Maven или Gradle.
  • Начать преобразование. Используйте простой API, предоставляемый FileFormat.Drako, для чтения и записи файлов Draco.

Рекомендуемый способ установки FileFormat.Drako для Java — использование maven. Для беспрепятственной установки используйте следующий фрагмент зависимости pom.

Фрагмент POM


<dependency>
  <groupId>dev.fileformat</groupId>
  <artifactId>drako</artifactId>
  <version>1.4.1</version>
</dependency>
 
Вы также можете загрузить его непосредственно с GitHub.

Чтение файла Draco в DracoMesh на Java

Этот фрагмент кода эффективно загружает файл Draco и сохраняет его в экземпляре DracoMesh для последующих операций.

  • Откройте файл DRC с именем «cube.drc», используя Files.readAllBytes.
  • Загрузите 3D-сетку из байтов в объект DracoMesh.

Скопируйте и вставьте приведенный ниже фрагмент кода в основной файл и запустите программу.

Чтение файла .drc в экземпляре DracoMesh

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

Чтение файла Draco и запись в Wavefront OBJ на Java

Следующий код показывает, как открыть существующий файл 3D Draco и записать его в формат obj для дальнейшей обработки:

  • Откройте файл Draco с именем «input.drc», используя Files.readAllBytes.
  • Загрузите сетку Draco из байтов в объект DracoMesh.
  • Найдите атрибут позиции с помощью DracoMesh.getNamedAttributeи преобразуйте его содержимое в FloatSpan.
  • Запишите контрольные точки для вывода, используя формат OBJ.
  • Прочитайте углы каждой грани, используя DracoMesh.readFace
  • Сопоставьте углы грани с индексом контрольных точек, используя PointAttribute.mappedIndex.
  • Запишите лица на вывод, используя формат OBJ.

Скопируйте и вставьте приведенный ниже фрагмент кода в основной файл и запустите программу.

Читать файл .drc в DracoMesh и экспортировать в объект wavefront

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

Кодировать контрольные точки и треугольники в файл Draco программно на Java

Приведенный код демонстрирует, как программно создать файл Draco из контрольных точек и треугольников и сохранить его как «output.drc» с помощью Java. Вот разбивка шагов:

  • Создайте экземпляр DracoMesh.
  • Обернуть контрольные точки в PointAttribute.
  • Добавьте PointAttributeв DracoMesh.
  • Добавьте индексы треугольников.
  • Создайте объект DracoEncodeOptionsс указанными параметрами кодирования.
  • Закодируйте сетку в байты, используя Draco.encode.

Скопируйте и вставьте приведенный ниже фрагмент кода в основной файл и запустите программу.

Закодировать векторы и грани в файл .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 предлагает интуитивно понятный API, комплексную поддержку форматов и полную интеграцию с приложениями Java, что позволяет разработчикам и пользователям легко управлять файлами Draco. Независимо от того, конвертируете ли вы файлы draco в другие файлы или загружаете draco для рендеринга, FileFormat.Drako упрощает процесс, обеспечивая оптимальную эффективность и качество на каждом этапе.

Изучите наш репозиторий GitHub, чтобы внести свой вклад, предложить улучшения и улучшить этот API с открытым исходным кодом: FileFormat.Drako- для Java

 Русский