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

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.

Previous Next

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.getNamedAttributee transforme seu conteúdo em FloatSpan.
  • 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 PointAttributeao DracoMesh.
  • Adicione os índices triangulares.
  • Crie um objeto DracoEncodeOptionscom 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

 Português