TinyGLTF est un en-tête uniquement C ++ 11 GLTF 2.0 https://github.com/khronosgroup/Gltf Library.
TinyGLTF utilise la bibliothèque JSON de Niels Lohmann (https://github.com/nlohmann/json), donc maintenant il nécessite le compilateur C ++ 11. (De plus, vous pouvez utiliser Radpidjson comme backend JSON) Si vous recherchez une ancienne version C ++ 03, veuillez utiliser la branche devel-picojson (mais plus maintenue).
Actuellement, TinyGlTF est stable et en mode de maintenance. Pas de modifications drastiques et d'ajouts de fonctionnalités prévus.
sajson : Utilisez Sajson pour analyser Json. Analyse uniquement le temps de compilation mais plus rapide (réduction 2x par rapport à JSON.HPP et Rapidjson), mais pas bien entretenu. Probablement principalement des fonctionnalités complétantes. La dernière fonctionnalité manquante est Draco Encoding: # 207
json.hpp . .bin . Dans Extension ( ExtensionMap ), la valeur du nombre JSON est analysée en tant qu'int ou float (numéro) et stockée sous le nom de tinygltf::Value Object. Si vous voulez une valeur de point flottante de tinygltf::Value , utilisez la méthode GetNumberAsDouble() .
IsNumber() Renvoie True si la valeur sous-jacente est une valeur int ou une valeur de point flottante.
Les utilisateurs qui souhaitent exécuter TinyGlTF en toute sécurité et en toute sécurité (par exemple, doivent gérer le fichier GLTF malve pour servir GLTF Conver en ligne), je recommande de construire TinyGlTF pour WasM Target. Exemple de construction Wasi est situé à Wasm.
- moteur 3D avec graphiques modernesextensions de support et propriété extras animation et skinTinyGlTF est sous licence MIT.
TinyGlTF utilise les bibliothèques tierces suivantes.
Copiez stb_image.h , stb_image_write.h , json.hpp et tiny_gltf.h à votre projet.
// 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 pour préserver les canaux d'image tels que stockés dans le fichier image pour l'image chargée. false par défaut pour la compatibilité arrière (les canaux d'image sont élargis en canaux RGBA 4). Efficace uniquement lors de l'utilisation du chargeur d'image intégré (chargeur d'image STB). TINYGLTF_NOEXCEPTION : désactiver l'exception C ++ dans l'analyse JSON. Vous pouvez utiliser -fno-exceptions ou en définissant le symbole JSON_NOEXCEPTION et TINYGLTF_NOEXCEPTION pour supprimer complètement les codes d'exception C ++ lors de la compilation TinyGlTF.TINYGLTF_NO_STB_IMAGE : ne chargez pas d'images avec stb_image. Utilisez plutôt TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data) pour définir un rappel pour charger des images.TINYGLTF_NO_STB_IMAGE_WRITE : n'écrivez pas d'images avec stb_image_write. Utilisez plutôt TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data) pour définir un rappel pour écrire des images.TINYGLTF_NO_EXTERNAL_IMAGE : n'essayez pas de charger un fichier image externe. Cette option serait utile si vous ne souhaitez pas charger des fichiers d'image pendant l'analyse GLTF.TINYGLTF_ANDROID_LOAD_FROM_ASSETS : Chargez tous les fichiers à partir des actifs de l'APP emballés au lieu du système de fichiers ordinaire. Remarque: Vous devez passer un gestionnaire d'actifs valide de votre application Android à tinygltf::asset_manager au préalable.TINYGLTF_ENABLE_DRACO : activer la compression Draco. L'utilisateur doit fournir des bibliothèques de correspondance de chemin et de lien inclut dans votre fichier de projet.TINYGLTF_NO_INCLUDE_JSON : Désactiver y compris json.hpp à partir de tiny_gltf.h car il a déjà été inclus auparavant ou que vous souhaitez l'inclure en utilisant un chemin personnalisé avant d'inclure tiny_gltf.h .TINYGLTF_NO_INCLUDE_RAPIDJSON : Désactiver y compris les fichiers d'en-tête de RapidJson à partir de tiny_gltf.h car il a déjà été inclus auparavant ou que vous souhaitez l'inclure en utilisant un chemin personnalisé avant d'inclure tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE : Désactiver y compris stb_image.h à partir de tiny_gltf.h car il a déjà été inclus auparavant ou que vous souhaitez l'inclure en utilisant un chemin personnalisé avant d'inclure tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE : désactiver y compris stb_image_write.h à partir de tiny_gltf.h car il a déjà été inclus avant ou que vous souhaitez l'inclure en utilisant un chemin personnalisé avant d'inclure tiny_gltf.h .TINYGLTF_USE_RAPIDJSON : utilisez RapidJson comme analyseur JSON / sérialiseur. Les fichiers RapidJSON ne sont pas inclus dans TinyGlTF Repo. Veuillez définir un chemin d'inclusion vers RapidJson si vous activez cette fonctionnalité.TINYGLTF_USE_CPP14 : utilisez la fonction C ++ 14 (nécessite le compilateur C ++ 14). Cela peut donner de meilleures performances que C ++ 11. Vous pouvez ajouter TinyGlTF à l'aide de la fonction add_subdirectory . Si vous ajoutez TinyGltf à votre projet en utilisant add_subdirectory , il serait préférable de définir TINYGLTF_HEADER_ONLY sur (il suffit d'ajouter un chemin d'inclusion à TinyGlTF) et TINYGLTF_INSTALL OFF (qui n'installe pas les fichiers 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)
Python requis. Git Clone https://github.com/khronosgroup/gltf-sample-models à votre Dir local.
Après avoir construit loader_example , modifiez test_runner.py , puis,
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept Voir tests/fuzzer pour plus de détails.
Après avoir exécuté Fuzzer sur Ryzen9 3950X par semaine, au moins LoadASCIIFromString semble sûr, sauf pour l'erreur hors mémoire à Fuzzer. Il est peut-être préférable d'introduire la vérification de la taille de la mémoire limitée lors de l'analyse des données GLTF.