FileFormat.Drako cho Java
Đơn giản hóa quy trình đọc và ghi tệp Google Draco bằng API Java
Dễ dàng chỉnh sửa tệp DRC nén bằng FileFormat.Drako, API Java 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 Java 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 Java 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 Java mã nguồn mở nhẹ này giúp đơ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ở.
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 Java: Dễ dàng tích hợpFileFormat.Drako vào các ứng dụng Java 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 Java: Dễ dàng tích hợpFileFormat.Drako vào các ứng dụng Java 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 Java
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 qua Maven hoặc Gradle.
- 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 Java được khuyên dùng là sử dụng maven. Vui lòng sử dụng đoạn mã phụ thuộc pom sau để quá trình cài đặt diễn ra suôn sẻ.
Đoạn POM
<dependency>
<groupId>dev.fileformat</groupId>
<artifactId>drako</artifactId>
<version>1.4.1</version>
</dependency>
Bạn cũng có thể tải xuống trực tiếp từ GitHub.Đọc tệp Draco vào DracoMesh bằng Java
Đ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
Files.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 = Files.readAllBytes(Paths.get("cube.drc"));
DracoMesh dm = (DracoMesh)Draco.decode(cube);
Đọc tệp Draco và ghi vào Wavefront OBJ bằng Java
Đ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
Files.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
DracoMesh.getNamedAttribution
và chuyển nội dung của nó thànhFloatSpan
. - 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
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));
}
}
}
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 Java
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 Java. 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+)
};
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 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 Java, 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- dành cho Java