TinyGLTF هو رأس فقط C ++ 11 GLTF 2.0 https://github.com/khronosgroup/gltf مكتبة.
يستخدم TinyGLTF مكتبة Niels Lohmann's Json (https://github.com/nlohmann/json) ، لذلك الآن يتطلب برنامج التحويل البرمجي C ++ 11. (أيضًا ، يمكنك استخدام Radpidjson كخلف JSON) إذا كنت تبحث عن إصدار قديم ، C ++ 03 ، يرجى استخدام فرع devel-picojson (ولكن لم يعد يتم الحفاظ عليه).
حاليا tinygltf مستقرة ووضع الصيانة. لا توجد تغييرات جذرية وإضافات ميزة مخطط لها.
sajson : استخدم ساجسون لتحرير JSON. التحليل فقط ولكن وقت التجميع أسرع (تخفيض 2x مقارنة مع JSON.HPP و Rapidjson) ، ولكن لم يتم صيانتها جيدًا. ربما في الغالب مكتمل الميزة. آخر ميزة مفقودة هي ترميز دراكو: #207
json.hpp . .bin . في الامتداد ( ExtensionMap ) ، يتم تحليل قيمة رقم JSON على أنها int أو float (رقم) وتخزينها ككائن tinygltf::Value . إذا كنت تريد قيمة نقطة عائمة من tinygltf::Value ، استخدم طريقة GetNumberAsDouble() .
إرجاع IsNumber() صحيح إذا كانت القيمة الأساسية هي قيمة int أو قيمة نقطة عائمة.
المستخدمون الذين يرغبون في تشغيل TinyGltf بأمان وأمان (على سبيل المثال ، يحتاجون إلى التعامل مع ملف GLTF malcious لخدمة Conversion GLTF عبر الإنترنت) ، أوصي ببناء TinyGltf لـ WASM Target. يوجد مثال بناء WASI في WASM.
- محرك ثلاثي الأبعاد مع رسومات حديثةextensions extras animation skintinygltf مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.
يستخدم Tinygltf مكتبات الجهات الخارجية التالية.
نسخ stb_image.h ، stb_image_write.h ، json.hpp و tiny_gltf.h إلى مشروعك.
// Define these only in *one* .cc file.
# define TINYGLTF_IMPLEMENTATION
# define STB_IMAGE_IMPLEMENTATION
# define STB_IMAGE_WRITE_IMPLEMENTATION
// #define TINYGLTF_NOEXCEPTION // optional. disable exception handling.
# include " tiny_gltf.h "
using namespace tinygltf ;
Model model;
TinyGLTF loader;
std::string err;
std::string warn;
bool ret = loader.LoadASCIIFromFile(&model, &err, &warn, argv[ 1 ]);
// bool ret = loader.LoadBinaryFromFile(&model, &err, &warn, argv[1]); // for binary glTF(.glb)
if (!warn.empty()) {
printf ( " Warn: %s n " , warn. c_str ());
}
if (!err.empty()) {
printf ( " Err: %s n " , err. c_str ());
}
if (!ret) {
printf ( " Failed to parse glTF n " );
return - 1 ;
}TinyGLTF::SetPreserveimageChannels(bool onoff) . true أن الحفاظ على قنوات الصور كما تم تخزينها في ملف الصورة للصورة المحملة. false افتراضيًا للتوافق المتخلف (تتسع قنوات الصور إلى قنوات RGBA 4). فعالة فقط عند استخدام محمل الصورة المدمجة (محمل صورة STB). TINYGLTF_NOEXCEPTION : تعطيل استثناء C ++ في تحليل JSON. يمكنك استخدام -fno-exceptions أو عن طريق تحديد الرمز JSON_NOEXCEPTION و TINYGLTF_NOEXCEPTION لإزالة رموز استثناء C ++ بالكامل عند تجميع tinygltf.TINYGLTF_NO_STB_IMAGE : لا تقم بتحميل الصور باستخدام STB_IMAGE. بدلاً من ذلك ، استخدم TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data) لتعيين رد اتصال لتحميل الصور.TINYGLTF_NO_STB_IMAGE_WRITE : لا تكتب الصور باستخدام stb_image_write. بدلاً من ذلك ، استخدم TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data) لتعيين رد اتصال لكتابة الصور.TINYGLTF_NO_EXTERNAL_IMAGE : لا تحاول تحميل ملف الصورة الخارجي. سيكون هذا الخيار مفيدًا إذا كنت لا ترغب في تحميل ملفات الصور أثناء تحليل GLTF.TINYGLTF_ANDROID_LOAD_FROM_ASSETS : قم بتحميل جميع الملفات من أصول التطبيق المعبأة بدلاً من نظام الملفات العادي. ملاحظة: يجب عليك تمرير مدير أصول صالح من تطبيق Android الخاص بك إلى tinygltf::asset_manager مسبقًا.TINYGLTF_ENABLE_DRACO : تمكين ضغط draco. يجب أن يقدم المستخدم تضمين مكتبات المسار والرابط في ملف مشروعك.TINYGLTF_NO_INCLUDE_JSON : تعطيل بما في ذلك json.hpp من داخل tiny_gltf.h لأنه تم تضمينه بالفعل من قبل أو كنت ترغب في تضمينه باستخدام مسار مخصص قبل تضمين tiny_gltf.h .TINYGLTF_NO_INCLUDE_RAPIDJSON : تعطيل بما في ذلك ملفات رأس Rapidjson من داخل tiny_gltf.h لأنه تم تضمينه بالفعل من قبل أو كنت ترغب في تضمينه باستخدام مسار مخصص قبل تضمين tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE : تعطيل بما في ذلك stb_image.h من داخل tiny_gltf.h لأنه تم تضمينه بالفعل من قبل أو تريد تضمينه باستخدام مسار مخصص قبل تضمين tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE : تعطيل بما في ذلك stb_image_write.h من داخل tiny_gltf.h لأنه تم تضمينه بالفعل من قبل أو تريد تضمينه باستخدام مسار مخصص قبل تضمين tiny_gltf.h .TINYGLTF_USE_RAPIDJSON : استخدم Rapidjson كحلائق JSON/Serializer. لم يتم تضمين ملفات Rapidjson في Tinygltf repo. يرجى تعيين مسار تضمين إلى Rapidjson إذا قمت بتمكين هذه الميزة.TINYGLTF_USE_CPP14 : استخدم ميزة C ++ 14 (يتطلب برنامج التحويل البرمجي C ++ 14). هذا قد يعطي أداء أفضل من C ++ 11. يمكنك إضافة tinygltf باستخدام ميزة add_subdirectory . إذا قمت بإضافة tinygltf إلى مشروعك باستخدام add_subdirectory ، فسيكون من الأفضل تعيين TINYGLTF_HEADER_ONLY على (فقط إضافة مسار إلى tinygltf) و TINYGLTF_INSTALL Off (والتي لا تثبيت ملفات tinygltf).
// Your project's CMakeLists.txt
...
set(TINYGLTF_HEADER_ONLY ON CACHE INTERNAL "" FORCE)
set(TINYGLTF_INSTALL OFF CACHE INTERNAL "" FORCE)
add_subdirectory(/path/to/tinygltf)
المطلوب بيثون. git clone https://github.com/khronosgroup/gltf-sample-models إلى dir المحلي الخاص بك.
بعد إنشاء loader_example ، تحرير test_runner.py ، ثم ،
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept انظر tests/fuzzer للحصول على التفاصيل.
بعد تشغيل Fuzzer على Ryzen9 3950x في الأسبوع ، على الأقل يبدو LoadASCIIFromString آمنًا باستثناء الخطأ خارج الذاكرة في Fuzzer. قد نكون من الأفضل تقديم فحص حجم الذاكرة المحدودة عند تحليل بيانات GLTF.