FileFormat.Drako cho .NET
Đơn giản hóa quy trình đọc và ghi tệp Google Draco bằng API .NET
Dễ dàng chỉnh sửa tệp DRC nén bằng FileFormat.Drako, API .NET nhẹ và mã nguồn mở, giúp đơn giản hóa việc chuyển đổi và tự động hóa tệp Draco
FileFormat.Drako cho .NET cách mạng hóa trải nghiệm xử lý tệp Draco của bạn. Trong hướng dẫn toàn diện này, chúng tôi đi sâu vào các chức năng và lợi ích của việc tận dụngFileFormat.Drako, một API .NET mã nguồn mở nhẹ, để dễ dàng xử lý các tệp Draco một cách dễ dàng.
Draco là thư viện nén mã nguồn mở do Google phát triển, chuyên nén và giải nén các lưới hình học 3D và các đám mây điểm. Bằng cách giảm đáng kể kích thước của tệp đồ họa 3D, Draco cho phép truyền nhanh hơn và giảm yêu cầu lưu trữ trong khi vẫn duy trì chất lượng hình ảnh. Nó hỗ trợ nhiều ứng dụng 3D khác nhau, bao gồm nền tảng di động và dựa trên web, đảm bảo xử lý hiệu quả dữ liệu 3D phức tạp. Draco được sử dụng rộng rãi trong các ngành như chơi game, thực tế ảo và hiển thị 3D để tối ưu hóa hiệu suất và nâng cao trải nghiệm người dùng.
FileFormat.Drako nổi lên như một giải pháp mạnh mẽ để đọc và ghi các tệp Draco một cách liền mạch. API .NET mã nguồn mở nhẹ này đơn giản hóa các thao tác với hình ảnh Draco, cung cấp cho nhà phát triển và người dùng giao diện thân thiện với người dùng để xử lý các tệp Draco một cách dễ dàng.
FileFormat.Drako được cung cấp theo Giấy phép mở.< /p>
Các tính năng và lợi ích chính- Tỷ lệ nén cao: Draco đạt được mức giảm đáng kể về kích thước tệp, thường giảm tới 90% mà không làm giảm đáng kể chất lượng hình ảnh. Điều này khiến nó trở nên lý tưởng cho các ứng dụng có băng thông và bộ nhớ bị hạn chế.
- Hỗ trợ nhiều loại dữ liệu khác nhau: Draco hỗ trợ nén nhiều loại dữ liệu 3D, bao gồm lưới hình học và đám mây điểm. Nó có thể xử lý các vị trí đỉnh, màu sắc, chuẩn mực và các thuộc tính khác một cách hiệu quả.
- Nén và giải nén nhanh: Thư viện được thiết kế để cung cấp khả năng nén và giải nén tốc độ cao, giúp thư viện phù hợp với các ứng dụng thời gian thực như trình xem 3D dựa trên web và trải nghiệm thực tế ảo.
- Nguồn mở và miễn phí: Tận hưởng lợi ích của giải pháp nguồn mở mà không phải trả phí cấp phép, giúp các nhà phát triển và người dùng ở mọi cấp độ có thể truy cập được.
- Tích hợp liền mạch với các ứng dụng C#: Dễ dàng tích hợpFileFormat.Drako vào các ứng dụng C# của bạn, cho phép xử lý tệp Draco liền mạch trong quy trình làm việc hiện tại của bạn.
- Tỷ lệ nén cao: Draco đạt được mức giảm đáng kể về kích thước tệp, thường giảm tới 90% mà không làm giảm đáng kể chất lượng hình ảnh. Điều này khiến nó trở nên lý tưởng cho các ứng dụng có băng thông và bộ nhớ bị hạn chế.
- Hỗ trợ nhiều loại dữ liệu khác nhau: Draco hỗ trợ nén nhiều loại dữ liệu 3D, bao gồm lưới hình học và đám mây điểm. Nó có thể xử lý các vị trí đỉnh, màu sắc, chuẩn mực và các thuộc tính khác một cách hiệu quả.
- Nén và giải nén nhanh: Thư viện được thiết kế để cung cấp khả năng nén và giải nén tốc độ cao, giúp thư viện phù hợp với các ứng dụng thời gian thực như trình xem 3D dựa trên web và trải nghiệm thực tế ảo.
- Nguồn mở và miễn phí: Tận hưởng lợi ích của giải pháp nguồn mở mà không phải trả phí cấp phép, giúp các nhà phát triển và người dùng ở mọi cấp độ có thể truy cập được.
- Tích hợp liền mạch với các ứng dụng C#: Dễ dàng tích hợpFileFormat.Drako vào các ứng dụng C# của bạn, cho phép xử lý tệp Draco liền mạch trong quy trình làm việc hiện tại của bạn.
Cách bắt đầu vớiFileFormat.Drako cho .NET
Bắt đầu vớiFileFormat.Drako thật nhanh chóng và dễ dàng. Chỉ cần làm theo các bước sau:
- InstallFileFormat.Drako: Cài đặt gói FileFormat.Drako thông qua Trình quản lý gói NuGet hoặc .NET CLI.
- Tích hợp với dự án của bạn: Tham khảo thư viện FileFormat.Drako trong dự án C# của bạn.
- Bắt đầu chuyển đổi: Sử dụng API đơn giản doFileFormat.Drako cung cấp để đọc và ghi các tệp Draco.
Cách cài đặtFileFormat.Drako cho .NET được khuyến nghị là sử dụng NuGet. Vui lòng sử dụng lệnh sau để cài đặt suôn sẻ.
InstallFileFormat.Drako cho .NET qua NuGet
NuGet> Install-PackageFileFormat.Drako
Bạn cũng có thể tải xuống trực tiếp từ GitHub.Đọc tệp Draco vào DracoMesh trong C#
Đoạn mã này tải tệp Draco một cách hiệu quả và lưu trữ tệp đó trong phiên bản DracoMesh cho các hoạt động tiếp theo.
- Mở tệp DRC có tên "cube.drc" bằng cách sử dụng
File.ReadAllBytes
. - Tải lưới 3D từ các byte vào đối tượng
DracoMesh
.
Sao chép và dán đoạn mã bên dưới vào tệp chính của bạn và thực thi chương trình.
Đọc tệp .drc vào phiên bản DracoMesh
byte[] cube = File.ReadAllBytes("cube.drc");
DracoMesh dm = (DracoMesh)Draco.Decode(cube);
Đọc tệp Draco và ghi vào Wavefront OBJ trong C#
Đoạn mã sau minh họa cách mở tệp 3D Draco hiện có và ghi sang định dạng obj để xử lý thêm:
- Mở tệp tệp Draco có tên "input.drc" bằng cách sử dụng
File.ReadAllBytes
. - Tải lưới Draco từ các byte vào đối tượng
DracoMesh
. - Tìm thuộc tính vị trí bằng cách sử dụng
DracoMesh.GetNamedAttribution
và chuyển nội dung của nó thànhSpan<float>
. - Ghi các điểm kiểm soát vào đầu ra bằng định dạng của OBJ.
- Đọc từng góc mặt bằng
DracoMesh.ReadFace
- Ánh xạ các góc mặt tới chỉ mục của các điểm kiểm soát bằng cách sử dụng
PointAttribution.MappedIndex
. - Ghi khuôn mặt vào đầu ra bằng định dạng của OBJ.
Sao chép và dán đoạn mã bên dưới vào tệp chính của bạn và thực thi chương trình.
Đọc tệp .drc sang DracoMesh và xuất sang obj wavefront
//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());
Mã hóa các điểm kiểm soát, hình tam giác thành tệp Draco theo lập trình trong C#
Mã được cung cấp minh họa cách tạo tệp Draco theo chương trình từ các điểm kiểm soát và hình tam giác, đồng thời lưu tệp đó dưới dạng "output.drc" bằng C#. Dưới đây là bảng phân tích các bước:
- Tạo một phiên bản
DracoMesh
. - Gói các điểm kiểm soát thành
PointAttribution
. - Thêm
PointAttribution
vàoDracoMesh
. - Thêm chỉ số tam giác.
- Tạo đối tượng
DracoEncodeOptions
với các tham số mã hóa được chỉ định. - Mã hóa lưới thành byte bằng
Draco.Encode
.
Sao chép và dán đoạn mã bên dưới vào tệp chính của bạn và thực thi chương trình.
Mã hóa vectơ và khuôn mặt thành tệp .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 cung cấp API trực quan, hỗ trợ định dạng toàn diện và tích hợp liền mạch với các ứng dụng C#, trao quyền cho các nhà phát triển cũng như người dùng quản lý các tệp Draco một cách dễ dàng. Cho dù bạn đang chuyển đổi tệp draco sang tệp khác hay tải draco để kết xuất, FileFormat.Drako đều đơn giản hóa quy trình, đảm bảo hiệu quả và chất lượng tối ưu ở mọi bước.
Khám phá kho lưu trữ GitHub của chúng tôi để đóng góp, đề xuất cải tiến và nâng cao API nguồn mở này: FileFormat.Drako -for-.NET