FileFormat.Drako para Java
Simplifique o processo de leitura e escrita de arquivos Google Draco usando a API Java
Edite facilmente arquivos DRC compactados com FileFormat.Drako, uma API Java leve e de código aberto, que simplifica a conversão e a automação de arquivos Draco
FileFormat.Drako for Java revoluciona sua experiência de processamento de arquivos Draco. Neste guia abrangente, nos aprofundamos nas funcionalidades e nos benefícios de aproveitar o FileFormat.Drako, uma API Java leve e de código aberto, para lidar com arquivos Draco sem esforço e com facilidade.
Draco é uma biblioteca de compactação de código aberto desenvolvida pelo Google especializada em compactar e descompactar malhas geométricas 3D e nuvens de pontos. Ao reduzir significativamente o tamanho dos arquivos gráficos 3D, o Draco permite uma transmissão mais rápida e reduz os requisitos de armazenamento, mantendo a qualidade visual. Ele oferece suporte a vários aplicativos 3D, incluindo plataformas móveis e baseadas na Web, garantindo o manuseio eficiente de dados 3D complexos. Draco é amplamente utilizado em setores como jogos, realidade virtual e visualização 3D para otimizar o desempenho e aprimorar a experiência do usuário.
FileFormat.Drako surge como uma solução poderosa para ler e gravar arquivos Draco perfeitamente. Esta API Java leve e de código aberto simplifica as operações de imagem Draco, oferecendo aos desenvolvedores e usuários uma interface amigável para lidar com arquivos Draco sem esforço.
FileFormat.Drako está disponível sob a Licença Openize.
Principais recursos e benefícios- Altas taxas de compactação: o Draco consegue uma redução significativa no tamanho dos arquivos, muitas vezes reduzindo-os em até 90% sem perda perceptível na qualidade visual. Isso o torna ideal para aplicações onde a largura de banda e o armazenamento são limitados.
- Suporte para vários tipos de dados: Draco suporta compactação para uma ampla variedade de tipos de dados 3D, incluindo malhas geométricas e nuvens de pontos. Ele pode lidar com posições de vértices, cores, normais e outros atributos de forma eficiente.
- Compactação e descompactação rápidas: a biblioteca foi projetada para oferecer compactação e descompactação de alta velocidade, tornando-a adequada para aplicativos em tempo real, como visualizadores 3D baseados na Web e experiências de realidade virtual.
- Código aberto e gratuito: Aproveite os benefícios de uma solução de código aberto sem taxas de licenciamento, tornando-a acessível a desenvolvedores e usuários de todos os níveis.
- Integração perfeita com aplicativos Java: IntegreFileFormat.Drako facilmente em seus aplicativos Java, permitindo o manuseio perfeito de arquivos Draco em seus fluxos de trabalho existentes.
- Altas taxas de compactação: o Draco consegue uma redução significativa no tamanho dos arquivos, muitas vezes reduzindo-os em até 90% sem perda perceptível na qualidade visual. Isso o torna ideal para aplicações onde a largura de banda e o armazenamento são limitados.
- Suporte para vários tipos de dados: Draco suporta compactação para uma ampla variedade de tipos de dados 3D, incluindo malhas geométricas e nuvens de pontos. Ele pode lidar com posições de vértices, cores, normais e outros atributos de forma eficiente.
- Compactação e descompactação rápidas: a biblioteca foi projetada para oferecer compactação e descompactação de alta velocidade, tornando-a adequada para aplicativos em tempo real, como visualizadores 3D baseados na Web e experiências de realidade virtual.
- Código aberto e gratuito: Aproveite os benefícios de uma solução de código aberto sem taxas de licenciamento, tornando-a acessível a desenvolvedores e usuários de todos os níveis.
- Integração perfeita com aplicativos Java: IntegreFileFormat.Drako facilmente em seus aplicativos Java, permitindo o manuseio perfeito de arquivos Draco em seus fluxos de trabalho existentes.
Como começar a usarFileFormat.Drako para Java
Começar a usar FileFormat.Drako é rápido e fácil. Basta seguir estas etapas:
- InstallFileFormat.Drako: Instale o pacote FileFormat.Drako via Maven ou Gradle.
- Comece a converter: Utilize a API simples fornecida porFileFormat.Drako para ler e gravar arquivos Draco.
A maneira recomendada de instalarFileFormat.Drako para Java é usando maven. Use o seguinte snippet de dependência pom para uma instalação tranquila.
Trecho POM
<dependency>
<groupId>org.openize</groupId>
<artifactId>drako</artifactId>
<version>1.4.0</version>
</dependency>
Você também pode baixá-lo diretamente do GitHub.Leia o arquivo Draco no DracoMesh em Java
Este trecho de código carrega com eficiência um arquivo Draco e o armazena em uma instância DracoMesh para operações subsequentes.
- Abra o arquivo DRC chamado "cube.drc" usando
Files.readAllBytes
. - Carregue a malha 3D dos bytes em um objeto
DracoMesh
.
Copie e cole o trecho de código abaixo em seu arquivo principal e execute o programa.
Leia o arquivo .drc para a instância DracoMesh
byte[] cube = Files.readAllBytes(Paths.get("cube.drc"));
DracoMesh dm = (DracoMesh)Draco.decode(cube);
Leia o arquivo Draco e grave no Wavefront OBJ em Java
O código a seguir ilustra como abrir um arquivo 3D Draco existente e gravar no formato obj para processamento adicional:
- Abra o arquivo Draco chamado "input.drc" usando
Files.readAllBytes
. - Carregue a malha Draco dos bytes em um objeto
DracoMesh
. - Encontre o atributo de posição usando
DracoMesh.getNamedAttribute
e transforme seu conteúdo emFloatSpan
. - Grave pontos de controle na saída usando o formato OBJ.
- Leia os cantos de cada face usando
DracoMesh.readFace
- Mapeie os cantos da face para o índice de pontos de controle usando
PointAttribute.mappedIndex
. - Escreva faces na saída usando o formato OBJ.
Copie e cole o trecho de código abaixo em seu arquivo principal e execute o programa.
Leia o arquivo .drc para DracoMesh e exporte para 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));
}
}
}
Codifique pontos de controle e triângulos no arquivo Draco Programaticamente em Java
O código fornecido demonstra como criar programaticamente um arquivo Draco a partir de pontos de controle e triângulos e salvá-lo como "output.drc" usando Java. Aqui está um detalhamento das etapas:
- Crie uma instância
DracoMesh
. - Envolva os pontos de controle em
PointAttribute
. - Adicione o
PointAttribute
aoDracoMesh
. - Adicione os índices triangulares.
- Crie um objeto
DracoEncodeOptions
com os parâmetros de codificação especificados. - Codifique a malha em bytes usando
Draco.encode
.
Copie e cole o trecho de código abaixo em seu arquivo principal e execute o programa.
Codificar vetores e faces em arquivo .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 oferece uma API intuitiva, suporte abrangente a formatos e integração perfeita com aplicativos Java, capacitando desenvolvedores e usuários a gerenciar arquivos Draco sem esforço. Esteja você convertendo arquivos draco em outros arquivos ou carregando draco para renderização, o FileFormat.Drako simplifica o processo, garantindo eficiência e qualidade ideais em cada etapa.
Explore nosso repositório GitHub para contribuir, sugerir melhorias e aprimorar esta API de código aberto: FileFormat.Drako- para Java