1. Home
  2.   Drako
  3.   Java용 FileFormat.Drako
FileFormat.Drako for Java

Java용 FileFormat.Drako

 
 

Google Draco 파일의 읽기 및 쓰기 프로세스를 Java API로 단순화

FileFormat.Drako로 압축된 DRC 파일을 손쉽게 편집하여 HEIC 파일 변환 및 자동화를 간소화하는 경량 오픈소스 Java API

Java용 FileFormat.Drako 는 Draco 파일 처리 경험을 혁신합니다. 이 종합 가이드에서는 경량 오픈 소스 Java API인 FileFormat.Drako를 활용하여 Draco 파일을 쉽게 처리할 수 있는 기능과 이점에 대해 자세히 알아봅니다.

Draco는 3D 기하학적 메시와 포인트 클라우드 압축 및 압축 해제를 전문으로 하는 Google에서 개발한 오픈 소스 압축 라이브러리입니다. Draco는 3D 그래픽 파일의 크기를 크게 줄임으로써 시각적 품질을 유지하면서 더 빠른 전송을 가능하게 하고 저장 요구 사항을 줄입니다. 웹 기반 및 모바일 플랫폼을 포함한 다양한 3D 애플리케이션을 지원하여 복잡한 3D 데이터를 효율적으로 처리할 수 있습니다. Draco는 게임, 가상 현실, 3D 시각화 등의 산업에서 성능을 최적화하고 사용자 경험을 향상시키는 데 널리 사용됩니다.

FileFormat.Drako는 Draco 파일을 원활하게 읽고 쓰기 위한 강력한 솔루션으로 등장합니다. 이 경량 오픈 소스 Java API는 Draco 이미지 작업을 단순화하여 개발자와 사용자에게 Draco 파일을 손쉽게 처리할 수 있는 사용자 친화적인 인터페이스를 제공합니다.

FileFormat.Drako는 MIT 라이선스에 따라 사용할 수 있습니다.

주요 기능 및 장점

  • 높은 압축률: Draco는 파일 크기를 크게 줄여 시각적 품질의 눈에 띄는 손실 없이 파일 크기를 최대 90%까지 줄입니다. 따라서 대역폭과 저장 공간이 제한된 애플리케이션에 이상적입니다.
  • 다양한 데이터 유형 지원: Draco는 지오메트리 메쉬 및 포인트 클라우드를 포함하여 광범위한 3D 데이터 유형에 대한 압축을 지원합니다. 정점 위치, 색상, 법선 및 기타 속성을 효율적으로 처리할 수 있습니다.
  • 빠른 압축 및 압축 풀기: 라이브러리는 고속 압축 및 압축 풀기를 제공하도록 설계되어 웹 기반 3D 뷰어 및 가상 현실 경험과 같은 실시간 애플리케이션에 적합합니다.
  • 오픈소스 및 무료: 라이센스 비용이 없고 모든 수준의 개발자와 사용자가 액세스할 수 있는 오픈소스 솔루션의 이점을 누려보세요.
  • Java 애플리케이션과의 원활한 통합: Java 애플리케이션에 손쉽게 IntegrateFileFormat.Drako를 통합하여 기존 워크플로 내에서 원활한 Draco 파일 처리를 가능하게 합니다.

Previous Next

Java용 FileFormat.Drako를 시작하는 방법

FileFormat.Drako를 시작하는 것은 빠르고 쉽습니다. 다음 단계를 따르세요.

  • InstallFileFormat.Drako: Maven 또는 Gradle을 통해 FileFormat.Drako 패키지를 설치합니다.
  • 변환 시작: FileFormat.Drako에서 제공하는 간단한 API를 활용하여 Draco 파일을 읽고 씁니다.

Java용 FileFormat.Drako를 설치하는 데 권장되는 방법은 maven을 사용하는 것입니다. 원활한 설치를 위해 다음 pom 종속성 스니펫을 사용하세요.

POM 스니펫


<dependency>
  <groupId>dev.fileformat</groupId>
  <artifactId>drako</artifactId>
  <version>1.4.1</version>
</dependency>
 
GitHub에서 직접 다운로드할 수도 있습니다.

Java의 DracoMesh로 Draco 파일 읽기

이 코드 조각은 Draco 파일을 효율적으로 로드하고 후속 작업을 위해 DracoMesh 인스턴스에 저장합니다.

  • Files.readAllBytes를 사용하여 "cube.drc"라는 DRC 파일을 엽니다.
  • 바이트에서 DracoMesh개체로 3D 메시를 로드합니다.

아래 코드 조각을 복사하여 기본 파일에 붙여넣고 프로그램을 실행하세요.

DracoMesh 인스턴스로 .drc 파일 읽기

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

Draco 파일 읽기 및 Java에서 Wavefront OBJ에 쓰기

다음 코드는 기존 3D Draco 파일을 열고 추가 처리를 위해 obj 형식으로 쓰는 방법을 보여줍니다.

  • Files.readAllBytes를 사용하여 "input.drc"라는 Draco 파일을 엽니다.
  • Draco 메시를 바이트에서 DracoMesh개체로 로드합니다.
  • DracoMesh.getNamedAttribute를 사용하여 위치 속성을 찾고 해당 콘텐츠를 FloatSpan으로 바꿉니다.
  • OBJ 형식을 사용하여 출력에 제어점을 씁니다.
  • DracoMesh.readFace를 사용하여 각 면 모서리를 읽습니다.
  • PointAttribute.mappedIndex를 사용하여 면 모서리를 제어점의 인덱스에 매핑합니다.
  • OBJ 형식을 사용하여 출력에 얼굴을 씁니다.

아래 코드 조각을 복사하여 기본 파일에 붙여넣고 프로그램을 실행하세요.

.drc 파일을 DracoMesh로 읽고 웨이브프런트 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));
          }
      }
  }

Java에서 프로그래밍 방식으로 제어점, 삼각형을 Draco 파일로 인코딩

제공된 코드는 프로그래밍 방식으로 제어점과 삼각형에서 Draco 파일을 생성하고 Java를 사용하여 "output.drc"로 저장하는 방법을 보여줍니다. 각 단계는 다음과 같습니다.

  • DracoMesh인스턴스를 생성합니다.
  • 제어점을 PointAttribute로 래핑합니다.
  • DracoMeshPointAttribute를 추가합니다.
  • 삼각형 인덱스를 추가합니다.
  • 지정된 인코딩 매개변수를 사용하여 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- for-Java

 한국인