TinyGLTF é apenas um cabeçalho C ++ 11 GLTF 2.0 https://github.com/khronosgroup/GLTF Library.
TinyGLTF usa a biblioteca JSON de Niels Lohmann (https://github.com/nlohmann/json), então agora requer compilador C ++ 11. (Além disso, você pode usar o Radpidjson como um back-end JSON) Se estiver procurando por uma versão antiga, C ++ 03, use devel-picojson Branch (mas não mais mantido).
Atualmente, o TinyGLTF é estável e no modo de manutenção. Sem alterações drásticas e adições de recursos planejadas.
sajson : Use Sajson para analisar JSON. Analisando apenas o tempo de compilação mais rápido (redução de 2x em comparação com JSON.HPP e RAPIDJSON), mas não bem mantidos. Provavelmente, principalmente completa. O último recurso ausente é a codificação de Draco: #207
json.hpp . .bin . Na extensão ( ExtensionMap ), o valor do número JSON é analisado como int ou float (número) e armazenado como objeto tinygltf::Value . Se você deseja um valor de ponto flutuante do tinygltf::Value , use o método GetNumberAsDouble() .
IsNumber() retorna true se o valor subjacente for um valor int ou um valor de ponto flutuante.
Usuários que desejam executar o TinyGLTF com segurança e segurança (por exemplo, precisam lidar com o arquivo GLTF mal -humorado para servir o GLTF on -line), recomendo construir o TinyGLTF para o destino WASM. O exemplo de construção do WASI está localizado no WASM.
- motor 3D com gráficos modernosextensions de suporte e propriedade extras animation e skinO TinyGLTF é licenciado sob licença do MIT.
O TinyGLTF usa as seguintes bibliotecas de terceiros.
Copie stb_image.h , stb_image_write.h , json.hpp e tiny_gltf.h para o seu projeto.
// 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 os canais de imagem conforme armazenados no arquivo de imagem para obter uma imagem carregada. false por padrão para compatibilidade com versões anteriores (os canais de imagem são ampliados para os canais RGBA 4). Eficaz apenas ao usar o carregador de imagem construído (carregador de imagem STB). TINYGLTF_NOEXCEPTION : Desative a exceção C ++ na análise JSON. Você pode usar -fno-exceptions ou definindo o símbolo JSON_NOEXCEPTION e TINYGLTF_NOEXCEPTION para remover completamente os códigos de exceção do C ++ ao compilar TinyGltf.TINYGLTF_NO_STB_IMAGE : Não carregue imagens com stb_image. Em vez disso, use TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data) para definir um retorno de chamada para carregar imagens.TINYGLTF_NO_STB_IMAGE_WRITE : Não escreva imagens com stb_image_write. Em vez disso, use TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data) para definir um retorno de chamada para escrever imagens.TINYGLTF_NO_EXTERNAL_IMAGE : Não tente carregar o arquivo de imagem externa. Essa opção seria útil se você não desejar carregar arquivos de imagem durante a análise GLTF.TINYGLTF_ANDROID_LOAD_FROM_ASSETS : Carregue todos os arquivos de ativos de aplicativos embalados em vez do sistema de arquivos regular. Nota: Você deve passar por um gerenciador de ativos válido do seu aplicativo Android para tinygltf::asset_manager com antecedência.TINYGLTF_ENABLE_DRACO : Ativar compressão DRACO. O usuário deve fornecer incluir o caminho e o link Correpning Libraries em seu arquivo de projeto.TINYGLTF_NO_INCLUDE_JSON : Desative incluindo json.hpp de dentro tiny_gltf.h porque ele já foi incluído antes ou você deseja incluí -lo usando o caminho personalizado antes de incluir tiny_gltf.h .TINYGLTF_NO_INCLUDE_RAPIDJSON : Desative incluindo os arquivos de cabeçalho do Rapidjson de dentro tiny_gltf.h porque ele já foi incluído antes ou você deseja incluí -lo usando o caminho personalizado antes de incluir tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE : Desative incluindo stb_image.h de dentro tiny_gltf.h porque ele já foi incluído antes ou você deseja incluí -lo usando o caminho personalizado antes de incluir tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE : desative incluindo stb_image_write.h de dentro de tiny_gltf.h porque ele já foi incluído antes ou você deseja incluí -lo usando o caminho personalizado antes de incluir tiny_gltf.h .TINYGLTF_USE_RAPIDJSON : Use Rapidjson como um analisador/serializador JSON. Os arquivos Rapidjson não estão incluídos no repo TinyGLTF. Defina um caminho de incluir para o Rapidjson se você ativar esse recurso.TINYGLTF_USE_CPP14 : Use o recurso C ++ 14 (requer compilador C ++ 14). Isso pode dar melhor desempenho que C ++ 11. Você pode adicionar TinyGLTF usando o recurso add_subdirectory . Se você adicionar TinyGLTF ao seu projeto usando add_subdirectory , seria melhor definir TINYGLTF_HEADER_ONLY (basta adicionar um caminho de incluir para tinyGLTF) e TINYGLTF_INSTALL off (que não instala arquivos 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 necessário. Git clone https://github.com/khronosgroup/gltf-sample-models para o seu diretor local.
Depois de construir loader_example , edite test_runner.py , então,
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept Consulte tests/fuzzer para obter detalhes.
Depois de executar o Fuzzher no Ryzen9 3950x por semana, pelo menos LoadASCIIFromString parece seguro, exceto por erro fora da memória no Fuzzher. Podemos ser melhores para introduzir verificação do tamanho da memória limitada ao analisar dados GLTF.