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