TinyGLTF es solo un encabezado C ++ 11 GLTF 2.0 https://github.com/khronosgroup/gltf biblioteca.
TinyGLTF usa la Biblioteca JSON de Niels Lohmann (https://github.com/nlohmann/json), por lo que ahora requiere el compilador C ++ 11. (Además, puede usar Radpidjson como un backend JSON) Si está buscando la versión vieja, C ++ 03, use la rama devel-picojson (pero ya no se mantiene).
Actualmente, TinyGLTF es estable y el modo de mantenimiento. No se planean cambios drásticos y adiciones de características.
sajson : Use Sajson para analizar JSON. Poner el tiempo de compilación solo pero más rápido (reducción de 2x en comparación con JSON.HPP y Rapidjson), pero no bien mantenido. Probablemente principalmente complete. La última característica faltante es la codificación de Draco: #207
json.hpp . .bin . En Extension ( ExtensionMap ), el valor del número JSON se analiza como int o float (número) y se almacena como objeto tinygltf::Value . Si desea un valor de punto flotante del tinygltf::Value , use el método GetNumberAsDouble() .
IsNumber() Devuelve verdadero si el valor subyacente es un valor int o un valor de punto flotante.
Los usuarios que desean ejecutar TinyGLTF de forma segura y segura (por ejemplo, deben manejar el archivo GLTF malcoso para servir en línea GLTF Conver), recomiendo construir TinyGltf para WASM Target. El ejemplo de WASI Build se encuentra en WASM.
- Motor 3D con gráficos modernosextensions y extras animation y skinTinygltf tiene licencia bajo la licencia MIT.
TinyGltf utiliza las siguientes bibliotecas de terceros.
Copie stb_image.h , stb_image_write.h , json.hpp y tiny_gltf.h a su proyecto.
// 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 para preservar los canales de imagen almacenados en el archivo de imagen para la imagen cargada. false de forma predeterminada para la compatibilidad hacia atrás (los canales de imagen se amplían a los canales RGBA 4). Efectivo solo cuando se usa el cargador de imágenes Builtin (cargador de imágenes STB). TINYGLTF_NOEXCEPTION : Desactive la excepción de C ++ en JSON PARSING. Puede usar -fno-exceptions o definiendo el símbolo JSON_NOEXCEPTION y TINYGLTF_NOEXCEPTION para eliminar completamente los códigos de excepción de C ++ al compilar TinyGLTF.TINYGLTF_NO_STB_IMAGE : no cargue imágenes con stb_image. En su lugar, use TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data) para establecer una devolución de llamada para cargar imágenes.TINYGLTF_NO_STB_IMAGE_WRITE : no escriba imágenes con stb_image_write. En su lugar, use TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data) para establecer una devolución de llamada para escribir imágenes.TINYGLTF_NO_EXTERNAL_IMAGE : no intente cargar un archivo de imagen externo. Esta opción sería útil si no desea cargar archivos de imagen durante el análisis de GLTF.TINYGLTF_ANDROID_LOAD_FROM_ASSETS : cargue todos los archivos de los activos de aplicaciones empaquetados en lugar del sistema de archivos regular. Nota: debe aprobar un Administrador de activos válido de su aplicación Android a tinygltf::asset_manager de antemano.TINYGLTF_ENABLE_DRACO : habilitar la compresión Draco. El usuario debe proporcionar las bibliotecas de Correespning de ruta y enlace en su archivo de proyecto.TINYGLTF_NO_INCLUDE_JSON : deshabilitar incluyendo json.hpp desde dentro tiny_gltf.h porque ya se ha incluido antes o desea incluirla usando una ruta personalizada antes de incluir tiny_gltf.h .TINYGLTF_NO_INCLUDE_RAPIDJSON : deshabilitar incluyendo los archivos de encabezado de Rapidjson desde dentro tiny_gltf.h porque ya se ha incluido antes o desea incluirlo usando una ruta personalizada antes de incluir tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE : deshabilitar incluyendo stb_image.h desde dentro de tiny_gltf.h porque ya se ha incluido antes o desea incluirla usando una ruta personalizada antes de incluir tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE : deshabilitar incluyendo stb_image_write.h desde tiny_gltf.h porque ya se ha incluido antes o desea incluirla usando la ruta personalizada antes de incluir tiny_gltf.h .TINYGLTF_USE_RAPIDJSON : use Rapidjson como un analizador/serializador JSON. Los archivos RapidJson no se incluyen en el repositorio de TinyGltf. Establezca una ruta de inclusión a Rapidjson si habilita esta función.TINYGLTF_USE_CPP14 : Use la función C ++ 14 (requiere el compilador C ++ 14). Esto puede dar un mejor rendimiento que C ++ 11. Puede agregar TinyGLTF usando la función add_subdirectory . Si agrega TinyGLTF a su proyecto usando add_subdirectory , sería mejor configurar TINYGLTF_HEADER_ONLY (solo agregue una ruta de incluido a TinyGLTF) y TINYGLTF_INSTALL OFF (que no instala archivos 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 requerido. Git clone https://github.com/khronosgroup/gltf-sample-models a su directorio local.
Después de construir loader_example , edite test_runner.py , entonces,
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept Consulte tests/fuzzer para más detalles.
Después de ejecutar Fuzzer en Ryzen9 3950X por semana, al menos LoadASCIIFromString parece seguro, excepto por un error fuera de memoria en Fuzzer. Es posible que sea mejor introducir una verificación de tamaño de memoria limitada al analizar los datos de GLTF.