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

FileFormat.Drako สำหรับ .NET

 
 

ทำให้กระบวนการอ่านและเขียนไฟล์ Google Draco ง่ายขึ้นด้วย API .NET

แก้ไขไฟล์ DRC ที่บีบอัดได้อย่างง่ายดายด้วย FileFormat.Drako ซึ่งเป็น API .NET แบบเปิดที่มีน้ำหนักเบา ช่วยให้การแปลงและการทำงานอัตโนมัติของไฟล์ Draco ง่ายขึ้น

FileFormat.Drako สำหรับ .NET ปฏิวัติประสบการณ์การประมวลผลไฟล์ Draco ของคุณ ในคู่มือที่ครอบคลุมนี้ เราจะเจาะลึกถึงฟังก์ชันและคุณประโยชน์ของการใช้ประโยชน์จาก FileFormat.Drako ซึ่งเป็น .NET API แบบโอเพ่นซอร์สน้ำหนักเบา เพื่อจัดการไฟล์ Draco ได้อย่างง่ายดาย

Draco เป็นไลบรารีการบีบอัดโอเพ่นซอร์สที่พัฒนาโดย Google ซึ่งเชี่ยวชาญด้านการบีบอัดและขยายขนาดตาข่ายเรขาคณิต 3 มิติและพอยต์คลาวด์ ด้วยการลดขนาดไฟล์กราฟิก 3D ลงอย่างมาก Draco จึงทำให้การรับส่งข้อมูลเร็วขึ้นและลดความต้องการในการจัดเก็บข้อมูลในขณะที่ยังคงคุณภาพของภาพไว้ รองรับแอปพลิเคชัน 3D ที่หลากหลาย รวมถึงแพลตฟอร์มบนเว็บและมือถือ ช่วยให้มั่นใจในการจัดการข้อมูล 3D ที่ซับซ้อนได้อย่างมีประสิทธิภาพ Draco ถูกนำมาใช้กันอย่างแพร่หลายในอุตสาหกรรมต่างๆ เช่น เกม ความเป็นจริงเสมือน และการแสดงภาพ 3 มิติ เพื่อเพิ่มประสิทธิภาพและปรับปรุงประสบการณ์ผู้ใช้

FileFormat.Drako กลายเป็นโซลูชั่นอันทรงพลังสำหรับการอ่านและเขียนไฟล์ Draco ได้อย่างราบรื่น โอเพ่นซอร์ส .NET API น้ำหนักเบานี้ทำให้การดำเนินการอิมเมจของ Draco ง่ายขึ้น โดยให้นักพัฒนาและผู้ใช้มีส่วนต่อประสานที่ใช้งานง่ายเพื่อจัดการไฟล์ Draco ได้อย่างง่ายดาย

FileFormat.Drako มีให้บริการภายใต้ Openize License< /พี>

คุณสมบัติหลักและคุณประโยชน์

  • อัตราส่วนการบีบอัดสูง: Draco สามารถลดขนาดไฟล์ลงได้อย่างมาก โดยมักจะลดขนาดลงได้ถึง 90% โดยไม่สูญเสียคุณภาพของภาพอย่างเห็นได้ชัด ทำให้เหมาะสำหรับแอปพลิเคชันที่มีแบนด์วิธและพื้นที่เก็บข้อมูลจำกัด
  • รองรับประเภทข้อมูลต่างๆ: Draco รองรับการบีบอัดข้อมูล 3D หลากหลายประเภท รวมถึงรูปทรงเรขาคณิตและพอยต์คลาวด์ สามารถจัดการตำแหน่งจุดยอด สี บรรทัดฐาน และคุณลักษณะอื่นๆ ได้อย่างมีประสิทธิภาพ
  • การบีบอัดและคลายการบีบอัดอย่างรวดเร็ว: ไลบรารีนี้ได้รับการออกแบบเพื่อให้มีการบีบอัดและคลายการบีบอัดด้วยความเร็วสูง ทำให้เหมาะสำหรับแอปพลิเคชันแบบเรียลไทม์ เช่น โปรแกรมดู 3D บนเว็บและประสบการณ์ความเป็นจริงเสมือน
  • ลี้>
  • โอเพ่นซอร์สและฟรี: เพลิดเพลินกับประโยชน์ของโซลูชันโอเพ่นซอร์สโดยไม่มีค่าธรรมเนียมใบอนุญาต ทำให้นักพัฒนาและผู้ใช้ทุกระดับสามารถเข้าถึงได้
  • การบูรณาการอย่างราบรื่นกับแอปพลิเคชัน C#: รวม FileFormat.Drako เข้ากับแอปพลิเคชัน C# ของคุณได้อย่างง่ายดาย ทำให้สามารถจัดการไฟล์ Draco ได้อย่างราบรื่นภายในเวิร์กโฟลว์ที่มีอยู่ของคุณ

วิธีเริ่มต้นใช้งาน FileFormat.Drako สำหรับ .NET

การเริ่มต้นใช้งาน FileFormat.Drako นั้นง่ายและรวดเร็ว เพียงทำตามขั้นตอนเหล่านี้:

  • InstallFileFormat.Drako: ติดตั้งแพ็คเกจ FileFormat.Drako ผ่าน NuGet Package Manager หรือ .NET CLI
  • ผสานรวมกับโครงการของคุณ: อ้างอิงไลบรารี FileFormat.Drako ในโปรเจ็กต์ C# ของคุณ
  • เริ่มการแปลง: ใช้ API แบบง่ายที่จัดทำโดยFileFormat.Drako เพื่ออ่านและเขียนไฟล์ Draco

วิธีที่แนะนำในการติดตั้งFileFormat.Drako สำหรับ .NET คือการใช้ NuGet โปรดใช้คำสั่งต่อไปนี้เพื่อการติดตั้งที่ราบรื่น

ติดตั้งFileFormat.Drako สำหรับ .NET ผ่าน NuGet

NuGet> Install-PackageFileFormat.Drako 
คุณยังสามารถดาวน์โหลดได้โดยตรงจาก GitHub

อ่านไฟล์ Draco ลงใน DracoMesh ใน C#

ข้อมูลโค้ดนี้จะโหลดไฟล์ Draco ได้อย่างมีประสิทธิภาพ และจัดเก็บไว้ในอินสแตนซ์ DracoMesh สำหรับการดำเนินการในภายหลัง

  • เปิดไฟล์ DRC ชื่อ "cube.drc" โดยใช้ File.ReadAllBytes
  • โหลด 3D mesh จากไบต์ลงในวัตถุ DracoMesh

คัดลอกและวางข้อมูลโค้ดด้านล่างลงในไฟล์หลักของคุณแล้วรันโปรแกรม

อ่านไฟล์ .drc ไปยังอินสแตนซ์ DracoMesh

 
    byte[] cube = File.ReadAllBytes("cube.drc");
    DracoMesh dm = (DracoMesh)Draco.Decode(cube);

อ่านไฟล์ Draco และเขียนไปยัง Wavefront OBJ ใน C#

โค้ดต่อไปนี้แสดงวิธีการเปิดไฟล์ 3D Draco ที่มีอยู่ และเขียนเป็นรูปแบบ obj เพื่อการประมวลผลเพิ่มเติม:

  • เปิดไฟล์ไฟล์ Draco ชื่อ "input.drc" โดยใช้ File.ReadAllBytes
  • โหลด Draco mesh จากไบต์ลงในอ็อบเจ็กต์ DracoMesh
  • ค้นหาแอตทริบิวต์ตำแหน่งโดยใช้ DracoMesh.GetNamedAttributeและเปลี่ยนเนื้อหาเป็น Span<float>.
  • เขียนจุดควบคุมไปยังเอาต์พุตโดยใช้รูปแบบของ OBJ
  • อ่านแต่ละมุมของใบหน้าโดยใช้ DracoMesh.ReadFace
  • แมปมุมใบหน้ากับดัชนีของจุดควบคุมโดยใช้ PointAttribute.MappedIndex
  • เขียนใบหน้าลงในเอาต์พุตโดยใช้รูปแบบของ OBJ

คัดลอกและวางข้อมูลโค้ดด้านล่างลงในไฟล์หลักของคุณแล้วรันโปรแกรม

อ่านไฟล์ .drc ไปยัง DracoMesh และส่งออกไปยัง wavefront obj

 
    //load draco file
    var bytes = File.ReadAllBytes("input.drc");
    var mesh = Draco.Decode(bytes) as DracoMesh;
    if (mesh == null)
        throw new InvalidDataException("Input file is not a valid draco file.");
    var attrPos = mesh.GetNamedAttribute(AttributeType.Position);
    var points = MemoryMarshal.Cast(attrPos.Buffer.AsSpan());
    var sb = new StringBuilder();
    for (int i = 0; i < points.Length; i += 3)
    {
        sb.AppendLine($"v {points[i]} {points[i + 1]} {points[i + 2]}");
    }
    Span face = stackalloc int[3];
    for (int i = 0; i < mesh.NumFaces; i++)
    {
        mesh.ReadFace(i, face);
        var a = attrPos.MappedIndex(face[0]) + 1;
        var b = attrPos.MappedIndex(face[1]) + 1;
        var c = attrPos.MappedIndex(face[2]) + 1;
        sb.AppendLine($"f {a} {b} {c}");
    }
    File.WriteAllText("output.obj", sb.ToString());

เข้ารหัสจุดควบคุม สามเหลี่ยมเป็นไฟล์ Draco โดยทางโปรแกรมใน C#

โค้ดที่ให้มาสาธิตวิธีการสร้างไฟล์ Draco โดยทางโปรแกรมจากจุดควบคุมและสามเหลี่ยม และบันทึกเป็น "output.drc" โดยใช้ C# ต่อไปนี้เป็นรายละเอียดขั้นตอนต่างๆ:

  • สร้างอินสแตนซ์ 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+)
  };

  var mesh = new DracoMesh();
  //construct an attribute for position, with type float[3], 
  var attrPos = PointAttribute.Wrap(AttributeType.Position, controlPoints);
  mesh.AddAttribute(attrPos);
  //add triangle indices
  mesh.Indices.AddRange(indices);
  //number of the control points, it's required for the encoder to produce correct result.
  mesh.NumPoints = 8;
  //You can also use following methods to deduplicate the attributes to reduce the file size
  //mesh.DeduplicateAttributeValues();
  //mesh.DeduplicatePointIds();

  var opt = new DracoEncodeOptions();
  var drcBytes = Draco.Encode(mesh, opt);
  File.WriteAllBytes("output.drc", drcBytes);

FileFormat.Drako นำเสนอ API ที่ใช้งานง่าย การรองรับรูปแบบที่ครอบคลุม และการผสานรวมกับแอปพลิเคชัน C# ได้อย่างราบรื่น ช่วยให้นักพัฒนาและผู้ใช้จัดการไฟล์ Draco ได้อย่างง่ายดาย ไม่ว่าคุณจะแปลงไฟล์ draco ไปเป็นไฟล์อื่นๆ หรือโหลด draco เพื่อการเรนเดอร์ FileFormat.Drako จะทำให้กระบวนการง่ายขึ้น รับประกันประสิทธิภาพและคุณภาพสูงสุดในทุกขั้นตอน

สำรวจพื้นที่เก็บข้อมูล GitHub ของเราเพื่อสนับสนุน แนะนำการปรับปรุง และปรับปรุง Open Source API นี้: FileFormat.Drako -สำหรับ-.NET