FileFormat.Drako untuk Java
Permudah Proses Membaca dan Menulis file Google Draco Menggunakan API Java
Dengan mudah mengedit file DRC terkompresi menggunakan FileFormat.Drako, API Java ringan dan sumber terbuka, yang menyederhanakan konversi dan otomatisasi file Draco
FileFormat.Drako untuk Java merevolusi pengalaman pemrosesan file Draco Anda. Dalam panduan komprehensif ini, kami mendalami fungsi dan manfaat memanfaatkanFileFormat.Drako, API Java sumber terbuka yang ringan, untuk menangani file Draco dengan mudah.
Draco adalah pustaka kompresi sumber terbuka yang dikembangkan oleh Google yang berspesialisasi dalam mengompresi dan mendekompresi jerat geometris 3D dan awan titik. Dengan mengurangi ukuran file grafik 3D secara signifikan, Draco memungkinkan transmisi lebih cepat dan mengurangi kebutuhan penyimpanan dengan tetap menjaga kualitas visual. Ini mendukung berbagai aplikasi 3D, termasuk platform berbasis web dan seluler, memastikan penanganan data 3D yang kompleks secara efisien. Draco banyak digunakan dalam industri seperti game, realitas virtual, dan visualisasi 3D untuk mengoptimalkan kinerja dan meningkatkan pengalaman pengguna.
FileFormat.Drako muncul sebagai solusi ampuh untuk membaca dan menulis file Draco dengan lancar. Java API sumber terbuka yang ringan ini menyederhanakan pengoperasian gambar Draco, menawarkan antarmuka yang ramah pengguna kepada pengembang dan pengguna untuk menangani file Draco dengan mudah.
FileFormat.Drako tersedia di bawah Lisensi MIT.
Fitur dan Manfaat Utama- Rasio Kompresi Tinggi: Draco mencapai pengurangan ukuran file secara signifikan, sering kali menguranginya hingga 90% tanpa kehilangan kualitas visual yang nyata. Hal ini menjadikannya ideal untuk aplikasi yang bandwidth dan penyimpanannya terbatas.
- Dukungan untuk Berbagai Tipe Data: Draco mendukung kompresi untuk berbagai tipe data 3D, termasuk mesh geometri dan point cloud. Ia dapat menangani posisi titik, warna, normal, dan atribut lainnya secara efisien.
- Kompresi dan Dekompresi Cepat: Pustaka dirancang untuk menawarkan kompresi dan dekompresi berkecepatan tinggi, sehingga cocok untuk aplikasi waktu nyata seperti pemirsa 3D berbasis web dan pengalaman realitas virtual.
- Sumber Terbuka dan Gratis: Nikmati manfaat solusi sumber terbuka tanpa biaya lisensi, sehingga dapat diakses oleh pengembang dan pengguna di semua tingkatan.
- Integrasi Sempurna dengan Aplikasi Java: IntegrasikanFileFormat.Drako dengan mudah ke dalam aplikasi Java Anda, memungkinkan penanganan file Draco yang lancar dalam alur kerja Anda yang ada.
- Rasio Kompresi Tinggi: Draco mencapai pengurangan ukuran file secara signifikan, sering kali menguranginya hingga 90% tanpa kehilangan kualitas visual yang nyata. Hal ini menjadikannya ideal untuk aplikasi yang bandwidth dan penyimpanannya terbatas.
- Dukungan untuk Berbagai Tipe Data: Draco mendukung kompresi untuk berbagai tipe data 3D, termasuk mesh geometri dan point cloud. Ia dapat menangani posisi titik, warna, normal, dan atribut lainnya secara efisien.
- Kompresi dan Dekompresi Cepat: Pustaka dirancang untuk menawarkan kompresi dan dekompresi berkecepatan tinggi, sehingga cocok untuk aplikasi waktu nyata seperti pemirsa 3D berbasis web dan pengalaman realitas virtual.
- Sumber Terbuka dan Gratis: Nikmati manfaat solusi sumber terbuka tanpa biaya lisensi, sehingga dapat diakses oleh pengembang dan pengguna di semua tingkatan.
- Integrasi Sempurna dengan Aplikasi Java: IntegrasikanFileFormat.Drako dengan mudah ke dalam aplikasi Java Anda, memungkinkan penanganan file Draco yang lancar dalam alur kerja Anda yang ada.
Cara Memulai FileFormat.Drako untuk Java
Memulai FileFormat.Drako cepat dan mudah. Cukup ikuti langkah-langkah berikut:
- InstallFileFormat.Drako: Instal paket FileFormat.Drako melalui Maven atau Gradle.
- Mulai Konversi: Manfaatkan API sederhana yang disediakan olehFileFormat.Drako untuk membaca dan menulis file Draco.
Cara yang disarankan untuk menginstalFileFormat.Drako untuk Java adalah menggunakan maven. Silakan gunakan cuplikan ketergantungan pom berikut untuk kelancaran instalasi.
Cuplikan POM
<dependency>
<groupId>dev.fileformat</groupId>
<artifactId>drako</artifactId>
<version>1.4.1</version>
</dependency>
Anda juga dapat mendownloadnya langsung dari GitHub.Baca File Draco ke DracoMesh di Java
Cuplikan kode ini secara efisien memuat file Draco, dan menyimpannya dalam instance DracoMesh untuk operasi selanjutnya.
- Buka file DRC bernama "cube.drc" menggunakan
Files.readAllBytes
. - Muat mesh 3D dari byte ke dalam objek
DracoMesh
.
Salin dan tempel cuplikan kode di bawah ini ke file utama Anda dan jalankan programnya.
Baca file .drc ke instance DracoMesh
byte[] cube = Files.readAllBytes(Paths.get("cube.drc"));
DracoMesh dm = (DracoMesh)Draco.decode(cube);
Baca file Draco dan tulis ke Wavefront OBJ di Java
Kode berikut mengilustrasikan cara membuka file Draco 3D yang ada, dan menulis ke format obj untuk diproses lebih lanjut:
- Buka file Draco dengan nama "input.drc" menggunakan
Files.readAllBytes
. - Muat mesh Draco dari byte ke dalam objek
DracoMesh
. - Temukan atribut posisi menggunakan
DracoMesh.getNamedAttribute
dan ubah kontennya menjadiFloatSpan
. - Tulis titik kontrol ke output menggunakan format OBJ.
- Baca setiap sudut wajah menggunakan
DracoMesh.readFace
- Petakan sudut muka ke indeks titik kontrol menggunakan
PointAttribute.mappedIndex
. - Tulis wajah ke keluaran menggunakan format OBJ.
Salin dan tempel cuplikan kode di bawah ini ke file utama Anda dan jalankan programnya.
Baca file .drc ke DracoMesh dan ekspor ke objek 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));
}
}
}
Encode titik kontrol, segitiga ke file Draco Secara terprogram di Java
Kode yang disediakan menunjukkan cara membuat file Draco secara terprogram dari titik kontrol dan segitiga, dan menyimpannya sebagai "output.drc" menggunakan Java. Berikut rincian langkah-langkahnya:
- Buat instance
DracoMesh
. - Gabungkan titik kontrol ke
PointAttribute
. - Tambahkan
PointAttribute
keDracoMesh
. - Tambahkan indeks segitiga.
- Buat objek
DracoEncodeOptions
dengan parameter pengkodean yang ditentukan. - Enkode mesh ke byte menggunakan
Draco.encode
.
Salin dan tempel cuplikan kode di bawah ini ke file utama Anda dan jalankan programnya.
Encode vektor dan wajah ke file .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 menawarkan API yang intuitif, dukungan format yang komprehensif, dan integrasi yang mulus dengan aplikasi Java, memberdayakan pengembang dan pengguna untuk mengelola file Draco dengan mudah. Baik Anda mengonversi file draco ke file lain, atau memuat draco untuk rendering,FileFormat.Drako menyederhanakan prosesnya, memastikan efisiensi dan kualitas optimal di setiap langkah.
Jelajahi repositori GitHub kami untuk berkontribusi, menyarankan perbaikan, dan menyempurnakan API Sumber Terbuka ini: FileFormat.Drako- untuk-Jawa