1. Home
  2.   Drako
  3.   FileFormat.Drako สำหรับ Java
FileFormat.Drako สำหรับ Java

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 ได้อย่างราบรื่นภายในเวิร์กโฟลว์ที่มีอยู่ของคุณ

วิธีเริ่มต้นใช้งาน 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