FileFormat.Drako لجافا
تبسيط عملية قراءة وكتابة ملفات Google Draco باستخدام واجهة برمجة التطبيقات لجافا
تعديل ملفات DRC المضغوطة بسهولة باستخدام FileFormat.Drako، واجهة برمجة التطبيقات لجافا مفتوحة المصدر وخفيفة الوزن، لتبسيط تحويل ملفات Draco والأتمتة
FileFormat.Drako لـ Java يُحدث ثورة في تجربة معالجة ملفات Draco. في هذا الدليل الشامل، نتعمق في وظائف وفوائد الاستفادة من FileFormat.Drako، وهي واجهة برمجة تطبيقات Java خفيفة الوزن ومفتوحة المصدر، للتعامل مع ملفات Draco بسهولة.
Draco هي مكتبة ضغط مفتوحة المصدر تم تطويرها بواسطة Google وهي متخصصة في ضغط وفك ضغط الشبكات الهندسية ثلاثية الأبعاد والسحب النقطية. من خلال تقليل حجم ملفات الرسومات ثلاثية الأبعاد بشكل كبير، تتيح Draco إمكانية النقل بشكل أسرع وتقليل متطلبات التخزين مع الحفاظ على الجودة المرئية. وهو يدعم العديد من التطبيقات ثلاثية الأبعاد، بما في ذلك المنصات المستندة إلى الويب والمتنقلة، مما يضمن التعامل الفعال مع البيانات ثلاثية الأبعاد المعقدة. يستخدم Draco على نطاق واسع في صناعات مثل الألعاب والواقع الافتراضي والتصور ثلاثي الأبعاد لتحسين الأداء وتعزيز تجربة المستخدم.
يظهر FileFormat.Drako كحل قوي لقراءة وكتابة ملفات Draco بسلاسة. تعمل واجهة Java API خفيفة الوزن ومفتوحة المصدر على تبسيط عمليات صور Draco، مما يوفر للمطورين والمستخدمين واجهة سهلة الاستخدام للتعامل مع ملفات Draco دون عناء.
يتوفر FileFormat.Drako ضمن فتح الترخيص.
الميزات والفوائد الرئيسية- نسب ضغط عالية: يحقق Draco تخفيضًا كبيرًا في أحجام الملفات، وغالبًا ما يقللها بنسبة تصل إلى 90% دون خسارة ملحوظة في جودة الصورة. وهذا يجعله مثاليًا للتطبيقات التي يكون فيها النطاق الترددي والتخزين محدودًا.
- دعم أنواع البيانات المختلفة: يدعم Draco الضغط لمجموعة كبيرة من أنواع البيانات ثلاثية الأبعاد، بما في ذلك الشبكات الهندسية والسحب النقطية. يمكنه التعامل مع مواضع القمة والألوان والأوضاع الطبيعية والسمات الأخرى بكفاءة.
- الضغط وإلغاء الضغط السريع: تم تصميم المكتبة لتوفير ضغط وإلغاء ضغط عالي السرعة، مما يجعلها مناسبة لتطبيقات الوقت الفعلي مثل المشاهد ثلاثية الأبعاد المستندة إلى الويب وتجارب الواقع الافتراضي.
- مفتوح المصدر ومجاني: استمتع بمزايا الحل مفتوح المصدر بدون رسوم ترخيص، مما يجعله في متناول المطورين والمستخدمين على جميع المستويات.
- التكامل السلس مع تطبيقات Java: قم بدمج FileFormat.Drako بسهولة في تطبيقات Java الخاصة بك، مما يتيح التعامل السلس مع ملفات Draco ضمن سير العمل الحالي لديك.
- نسب ضغط عالية: يحقق Draco تخفيضًا كبيرًا في أحجام الملفات، وغالبًا ما يقللها بنسبة تصل إلى 90% دون خسارة ملحوظة في جودة الصورة. وهذا يجعله مثاليًا للتطبيقات التي يكون فيها النطاق الترددي والتخزين محدودًا.
- دعم أنواع البيانات المختلفة: يدعم Draco الضغط لمجموعة كبيرة من أنواع البيانات ثلاثية الأبعاد، بما في ذلك الشبكات الهندسية والسحب النقطية. يمكنه التعامل مع مواضع القمة والألوان والأوضاع الطبيعية والسمات الأخرى بكفاءة.
- الضغط وإلغاء الضغط السريع: تم تصميم المكتبة لتوفير ضغط وإلغاء ضغط عالي السرعة، مما يجعلها مناسبة لتطبيقات الوقت الفعلي مثل المشاهد ثلاثية الأبعاد المستندة إلى الويب وتجارب الواقع الافتراضي.
- مفتوح المصدر ومجاني: استمتع بمزايا الحل مفتوح المصدر بدون رسوم ترخيص، مما يجعله في متناول المطورين والمستخدمين على جميع المستويات.
- التكامل السلس مع تطبيقات Java: قم بدمج FileFormat.Drako بسهولة في تطبيقات Java الخاصة بك، مما يتيح التعامل السلس مع ملفات Draco ضمن سير العمل الحالي لديك.
كيفية البدء باستخدام FileFormat.Drako لجافا
تعتبر عملية البدء باستخدام FileFormat.Drako عملية سريعة وسهلة. ما عليك سوى اتباع الخطوات التالية:
- InstallFileFormat.Drako: قم بتثبيت حزمة FileFormat.Drako عبر Maven أو Gradle.
- بدء التحويل: استخدم واجهة برمجة التطبيقات البسيطة التي يوفرها FileFormat.Drako لقراءة ملفات Draco وكتابتها.
الطريقة الموصى بها لتثبيت FileFormat.Drako لـ Java هي استخدام maven. الرجاء استخدام مقتطف تبعية pom التالي للتثبيت السلس.
مقتطف بوم
<dependency>
<groupId>org.openize</groupId>
<artifactId>drako</artifactId>
<version>1.4.0</version>
</dependency>
يمكنك أيضًا تنزيله مباشرةً من GitHub.اقرأ ملف Draco في DracoMesh في Java
يقوم مقتطف التعليمات البرمجية هذا بتحميل ملف Draco بكفاءة، ويخزنه في مثيل DracoMesh للعمليات اللاحقة.
- افتح ملف DRC المسمى "cube.drc" باستخدام
Files.readAllBytes
. - قم بتحميل الشبكة ثلاثية الأبعاد من البايتات إلى كائن
DracoMesh
.
انسخ مقتطف الشفرة أدناه والصقه في ملفك الرئيسي وقم بتنفيذ البرنامج.
قراءة ملف .drc لمثيل DracoMesh
byte[] cube = Files.readAllBytes(Paths.get("cube.drc"));
DracoMesh dm = (DracoMesh)Draco.decode(cube);
اقرأ ملف Draco واكتب إلى Wavefront OBJ في Java
يوضح التعليمة البرمجية التالية كيفية فتح ملف Draco ثلاثي الأبعاد موجود، والكتابة بتنسيق obj لمزيد من المعالجة:
- افتح ملف Draco المسمى "input.drc" باستخدام
Files.readAllBytes
. - قم بتحميل شبكة Draco من البايتات إلى كائن
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
بمعلمات التشفير المحددة. - قم بتشفير الشبكة إلى بايتات باستخدام
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 واجهة برمجة تطبيقات بديهية، ودعمًا شاملاً للتنسيق، وتكاملًا سلسًا مع تطبيقات Java، مما يمكّن المطورين والمستخدمين على حدٍ سواء من إدارة ملفات Draco دون عناء. سواء كنت تقوم بتحويل ملفات draco إلى ملفات أخرى، أو تحميل draco للعرض، فإن FileFormat.Drako يبسط العملية، مما يضمن الكفاءة والجودة المثلى في كل خطوة.
استكشف مستودع GitHub الخاص بنا للمساهمة واقتراح التحسينات وتعزيز واجهة برمجة التطبيقات مفتوحة المصدر هذه: FileFormat.Drako- لجافا