TinyGLTF - это только заголовок C ++ 11 GLTF 2.0 https://github.com/khronosgroup/GLTF Библиотека.
TinyGLTF использует библиотеку JSON Niels Lohmann (https://github.com/nlohmann/json), так что теперь ему требуется компилятор C ++ 11. (Кроме того, вы можете использовать Radpidjson в качестве бэкэнда JSON) Если вы ищете старую версию C ++ 03, используйте филиал devel-picojson (но больше не поддерживается).
В настоящее время TinyGltf является стабильным и режимом обслуживания. Нет резких изменений и дополнений функций.
sajson : Используйте Sajson для анализа Json. Только анализ, но более быстрое время компиляции (снижение 2 раза по сравнению с JSON.HPP и Rapidjson), но не очень хорошо поддерживается. Вероятно, в основном функциональный. Последняя отсутствующая функция - Draco Encoding: #207
json.hpp . .bin FILE. В расширении ( ExtensionMap ) значение номера JSON анализируется как int или float (номер) и сохраняется как объект tinygltf::Value . Если вы хотите значение плавающей запятой от tinygltf::Value , используйте метод GetNumberAsDouble() .
IsNumber() возвращает true, если базовое значение является значением INT или значением плавающей запятой.
Пользователи, которые хотят безопасно и безопасно запускать TinyGltf (например, необходимо обрабатывать недовольный файл GLTF для обслуживания онлайн -конверта GLTF), я рекомендую построить TinyGltf для WASM Target. Пример сборки WASI находится в WASM.
- 3D -двигатель с современной графикойextensions и собственность extras animation и skinTinyGltf лицензирован по лицензии MIT.
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. Пользователь должен предоставить включать в себя библиотеки Corprespnding Path и ссылки в файл проекта.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. Файлы Rapidjson не включены в TinyGltf Repo. Пожалуйста, установите include Path to Rapidjson, если вы включите эту функцию.TINYGLTF_USE_CPP14 : используйте функцию C ++ 14 (требуется компилятор C ++ 14). Это может дать лучшую производительность, чем C ++ 11. Вы можете добавить tinygltf, используя функцию add_subdirectory . Если вы добавите TinyGltf в свой проект, используя add_subdirectory , было бы лучше установить TINYGLTF_HEADER_ONLY on (просто добавьте включение Path to 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)
Требуется Python. Git clone https://github.com/khronosgroup/gltf-models в вашем локальном режиме.
После строительства loader_example , редактируйте test_runner.py , затем,
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept Смотрите tests/fuzzer для деталей.
После запуска Fuzzer на Ryzen9 3950x в неделю, по крайней мере, LoadASCIIFromString выглядит безопасным, за исключением ошибок вне памяти в Fuzzer. Мы можем быть лучше ввести ограниченную проверку размера памяти при анализе данных GLTF.