FileFormat.Drako สำหรับ Java
ทำให้กระบวนการอ่านและเขียนไฟล์ Google Draco ง่ายขึ้นด้วย API Java
แก้ไขไฟล์ DRC ที่บีบอัดได้อย่างง่ายดายด้วย FileFormat.Drako ซึ่งเป็น API Java แบบเปิดที่มีน้ำหนักเบา ช่วยให้การแปลงและการทำงานอัตโนมัติของไฟล์ Draco ง่ายขึ้น
FileFormat.Drako สำหรับ Java ปฏิวัติประสบการณ์การประมวลผลไฟล์ Draco ของคุณ ในคู่มือที่ครอบคลุมนี้ เราจะเจาะลึกถึงฟังก์ชันและคุณประโยชน์ของการใช้ประโยชน์จาก FileFormat.Drako ซึ่งเป็น Java API แบบโอเพ่นซอร์สน้ำหนักเบา เพื่อจัดการไฟล์ Draco ได้อย่างง่ายดาย
Draco เป็นไลบรารีการบีบอัดโอเพ่นซอร์สที่พัฒนาโดย Google ซึ่งเชี่ยวชาญด้านการบีบอัดและขยายขนาดตาข่ายเรขาคณิต 3 มิติและพอยต์คลาวด์ ด้วยการลดขนาดไฟล์กราฟิก 3D ลงอย่างมาก Draco จึงทำให้การรับส่งข้อมูลเร็วขึ้นและลดความต้องการในการจัดเก็บข้อมูลในขณะที่ยังคงคุณภาพของภาพไว้ รองรับแอปพลิเคชัน 3D ที่หลากหลาย รวมถึงแพลตฟอร์มบนเว็บและมือถือ ช่วยให้มั่นใจในการจัดการข้อมูล 3D ที่ซับซ้อนได้อย่างมีประสิทธิภาพ Draco ถูกนำมาใช้กันอย่างแพร่หลายในอุตสาหกรรมต่างๆ เช่น เกม ความเป็นจริงเสมือน และการแสดงภาพ 3 มิติ เพื่อเพิ่มประสิทธิภาพและปรับปรุงประสบการณ์ผู้ใช้
FileFormat.Drako กลายเป็นโซลูชั่นอันทรงพลังสำหรับการอ่านและเขียนไฟล์ Draco ได้อย่างราบรื่น Java API แบบโอเพ่นซอร์สน้ำหนักเบานี้ทำให้การทำงานของอิมเมจของ Draco ง่ายขึ้น โดยให้นักพัฒนาและผู้ใช้มีอินเทอร์เฟซที่ใช้งานง่ายเพื่อจัดการไฟล์ Draco ได้อย่างง่ายดาย
FileFormat.Drako มีให้บริการภายใต้ MIT License พี>
คุณสมบัติหลักและคุณประโยชน์- อัตราส่วนการบีบอัดสูง: Draco สามารถลดขนาดไฟล์ลงได้อย่างมาก โดยมักจะลดขนาดลงได้ถึง 90% โดยไม่สูญเสียคุณภาพของภาพอย่างเห็นได้ชัด ทำให้เหมาะสำหรับแอปพลิเคชันที่มีแบนด์วิธและพื้นที่เก็บข้อมูลจำกัด
- รองรับประเภทข้อมูลต่างๆ: Draco รองรับการบีบอัดข้อมูล 3D หลากหลายประเภท รวมถึงรูปทรงเรขาคณิตและพอยต์คลาวด์ สามารถจัดการตำแหน่งจุดยอด สี บรรทัดฐาน และคุณลักษณะอื่นๆ ได้อย่างมีประสิทธิภาพ
- การบีบอัดและคลายการบีบอัดอย่างรวดเร็ว: ไลบรารีนี้ได้รับการออกแบบเพื่อให้มีการบีบอัดและคลายการบีบอัดด้วยความเร็วสูง ทำให้เหมาะสำหรับแอปพลิเคชันแบบเรียลไทม์ เช่น โปรแกรมดู 3D บนเว็บและประสบการณ์ความเป็นจริงเสมือน
ลี้>- โอเพ่นซอร์สและฟรี: เพลิดเพลินกับประโยชน์ของโซลูชันโอเพ่นซอร์สโดยไม่มีค่าธรรมเนียมใบอนุญาต ทำให้นักพัฒนาและผู้ใช้ทุกระดับสามารถเข้าถึงได้
- การบูรณาการอย่างราบรื่นกับแอปพลิเคชัน Java: IntegrateFileFormat.Drako เข้ากับแอปพลิเคชัน Java ของคุณได้อย่างง่ายดาย ทำให้สามารถจัดการไฟล์ Draco ได้อย่างราบรื่นภายในเวิร์กโฟลว์ที่มีอยู่ของคุณ
- อัตราส่วนการบีบอัดสูง: Draco สามารถลดขนาดไฟล์ลงได้อย่างมาก โดยมักจะลดขนาดลงได้ถึง 90% โดยไม่สูญเสียคุณภาพของภาพอย่างเห็นได้ชัด ทำให้เหมาะสำหรับแอปพลิเคชันที่มีแบนด์วิธและพื้นที่เก็บข้อมูลจำกัด
- รองรับประเภทข้อมูลต่างๆ: Draco รองรับการบีบอัดข้อมูล 3D หลากหลายประเภท รวมถึงรูปทรงเรขาคณิตและพอยต์คลาวด์ สามารถจัดการตำแหน่งจุดยอด สี บรรทัดฐาน และคุณลักษณะอื่นๆ ได้อย่างมีประสิทธิภาพ
- การบีบอัดและคลายการบีบอัดอย่างรวดเร็ว: ไลบรารีนี้ได้รับการออกแบบเพื่อให้มีการบีบอัดและคลายการบีบอัดด้วยความเร็วสูง ทำให้เหมาะสำหรับแอปพลิเคชันแบบเรียลไทม์ เช่น โปรแกรมดู 3D บนเว็บและประสบการณ์ความเป็นจริงเสมือน ลี้>
- โอเพ่นซอร์สและฟรี: เพลิดเพลินกับประโยชน์ของโซลูชันโอเพ่นซอร์สโดยไม่มีค่าธรรมเนียมใบอนุญาต ทำให้นักพัฒนาและผู้ใช้ทุกระดับสามารถเข้าถึงได้
- การบูรณาการอย่างราบรื่นกับแอปพลิเคชัน Java: IntegrateFileFormat.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 mesh จากไบต์ลงในวัตถุ
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 mesh จากไบต์ลงในอ็อบเจ็กต์
DracoMesh
- ค้นหาแอตทริบิวต์ตำแหน่งโดยใช้
DracoMesh.getNamedAttribute
และเปลี่ยนเนื้อหาเป็นFloatSpan
- เขียนจุดควบคุมไปยังเอาต์พุตโดยใช้รูปแบบของ OBJ
- อ่านแต่ละมุมของใบหน้าโดยใช้
DracoMesh.readFace
- แมปมุมใบหน้ากับดัชนีของจุดควบคุมโดยใช้
PointAttribute.mappedIndex
- เขียนใบหน้าลงในเอาต์พุตโดยใช้รูปแบบของ OBJ
คัดลอกและวางข้อมูลโค้ดด้านล่างลงในไฟล์หลักของคุณแล้วรันโปรแกรม
อ่านไฟล์ .drc ไปยัง DracoMesh และส่งออกไปยัง 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));
}
}
}
เข้ารหัสจุดควบคุม สามเหลี่ยมเป็นไฟล์ Draco โดยทางโปรแกรมใน Java
โค้ดที่ให้มาสาธิตวิธีการสร้างไฟล์ Draco โดยทางโปรแกรมจากจุดควบคุมและสามเหลี่ยม และบันทึกเป็น "output.drc" โดยใช้ Java ต่อไปนี้เป็นรายละเอียดขั้นตอนต่างๆ:
- สร้างอินสแตนซ์
DracoMesh
- ตัดจุดควบคุมไปที่
PointAttribute
- เพิ่ม
PointAttribute
ให้กับDracoMesh
. - เพิ่มดัชนีสามเหลี่ยม
- สร้างออบเจ็กต์
DracoEncodeOptions
ด้วยพารามิเตอร์การเข้ารหัสที่ระบุ - เข้ารหัส mesh เป็นไบต์โดยใช้
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 ของเราเพื่อสนับสนุน แนะนำการปรับปรุง และปรับปรุง Open Source API นี้: FileFormat.Drako- สำหรับ-Java