ملف وكاتب كاتب وكاتب من طراز واحد/STB
تستخدم في: BGFX ، الشعيرة ، GLTFPACK ، RAYLIB ، UNIGINE ، وأكثر!
التحميل من الملف:
#define CGLTF_IMPLEMENTATION
#include "cgltf.h"
cgltf_options options = { 0 };
cgltf_data * data = NULL ;
cgltf_result result = cgltf_parse_file ( & options , "scene.gltf" , & data );
if ( result == cgltf_result_success )
{
/* TODO make awesome stuff */
cgltf_free ( data );
}التحميل من الذاكرة:
#define CGLTF_IMPLEMENTATION
#include "cgltf.h"
void * buf ; /* Pointer to glb or gltf file data */
size_t size ; /* Size of the file data */
cgltf_options options = { 0 };
cgltf_data * data = NULL ;
cgltf_result result = cgltf_parse ( & options , buf , size , & data );
if ( result == cgltf_result_success )
{
/* TODO make awesome stuff */
cgltf_free ( data );
} لاحظ أن CGLTF لا يقوم بتحميل محتويات الملفات الإضافية مثل المخازن المؤقتة أو الصور في الذاكرة افتراضيًا. ستحتاج إلى قراءة هذه الملفات بنفسك باستخدام URIs من data.buffers[] أو data.images[] على التوالي. بالنسبة لبيانات المخزن المؤقت ، يمكنك بدلاً من ذلك الاتصال بـ cgltf_load_buffers ، والتي ستستخدم FILE* APIs لفتح وقراءة الملفات العازلة. هذا يدلل تلقائيا BASE64 DATA URIs في المخازن المؤقتة. بالنسبة للبيانات URIs في الصور ، ستحتاج إلى استخدام cgltf_load_buffer_base64 .
لمزيد من الوثائق المتعمقة ووصف الواجهة العامة ، ارجع إلى أعلى ملف cgltf.h .
عند كتابة بيانات GLTF ، تحتاج إلى بنية صالحة cgltf_data التي تمثل مستند GLTF صالح. يمكنك بناء مثل هذا الهيكل بنفسك أو تحميله باستخدام وظائف اللودر الموضحة أعلاه. وظائف الكاتب لا تتعامل مع أي ذاكرة. لذلك ، عليك إما القيام بذلك يدويًا أو الاتصال cgltf_free() إذا حصلت على البيانات عن طريق تحميلها من مستند GLTF.
الكتابة إلى ملف:
#define CGLTF_IMPLEMENTATION
#define CGLTF_WRITE_IMPLEMENTATION
#include "cgltf_write.h"
cgltf_options options = { 0 };
cgltf_data * data = /* TODO must be valid data */ ;
cgltf_result result = cgltf_write_file ( & options , "out.gltf" , data );
if ( result != cgltf_result_success )
{
/* TODO handle error */
}الكتابة إلى الذاكرة:
#define CGLTF_IMPLEMENTATION
#define CGLTF_WRITE_IMPLEMENTATION
#include "cgltf_write.h"
cgltf_options options = { 0 };
cgltf_data * data = /* TODO must be valid data */ ;
cgltf_size size = cgltf_write ( & options , NULL , 0 , data );
char * buf = malloc ( size );
cgltf_size written = cgltf_write ( & options , buf , size , data );
if ( written != size )
{
/* TODO handle error */
}لاحظ أن CGLTF لا تكتب محتويات الملفات الإضافية مثل المخازن المؤقتة أو الصور. ستحتاج إلى كتابة هذه البيانات بنفسك.
لمزيد من الوثائق المتعمقة ووصف الواجهة العامة ، ارجع إلى أعلى ملف cgltf_write.h .
يدعم CGLTF Core GLTF 2.0:
يدعم CGLTF أيضًا بعض ملحقات GLTF:
لا يدعم CGLTF بعد الامتدادات غير المدرجة. ومع ذلك ، يمكن الوصول إلى الامتدادات غير المدرجة عبر عضو "الامتدادات" على الكائنات.
أسهل نهج هو دمج ملف رأس cgltf.h في مشروعك. إذا لم تكن على دراية بمكتبات C-File Cibraries (المعروفة أيضًا باسم المكتبات على غرار STB) ، فهذه هي الطريقة التي تسير بها:
cgltf.h حيث تحتاج إلى الوظيفة.CGLTF_IMPLEMENTATION قبل تضمين cgltf.h . يمكن العثور على دعم الكتابة في ملف منفصل يسمى cgltf_write.h (والذي يتضمن cgltf.h ). بناءها تعمل بشكل مماثل باستخدام تحديد CGLTF_WRITE_IMPLEMENTATION .
الجميع مرحب بهم للمساهمة في المكتبة. إذا وجدت أي مشاكل ، فيمكنك إرسالها باستخدام نظام مشكلات Github. إذا كنت ترغب في المساهمة في رمز ، فيجب عليك أن تتفوق على المشروع ثم إرسال طلب سحب.
لا أحد.
رؤوس C التي تستخدمها التنفيذ:
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <assert.h> // If asserts are enabled.
ملاحظة ، تحتوي هذه المكتبة على نسخة من JSMN JSON Parser المضمنة في مصدرها.
يوجد برنامج نصي Python في test/ المجلد يسترجع ملفات GLTF 2.0 من مستودع GLTF-Sample-Models (https://github.com/khronosgroup/gltf-sample-models/tree/master/2.0) ويدير المكتبة ضد جميع ملفات GLTF و GLB.
إليك طريقة واحدة لبناء وتشغيل الاختبار:
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
يوجد أيضًا اختبار LLVM-Fuzz في fuzz/ . انظر http://llvm.org/docs/libfuzzer.html لمزيد من المعلومات.