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