TinyGLTF adalah header saja C ++ 11 GLTF 2.0 https://github.com/khronosgroup/gltf Perpustakaan.
TinyGLTF menggunakan Perpustakaan JSON Niels Lohmann (https://github.com/nlohmann/json), jadi sekarang membutuhkan kompiler C ++ 11. devel-picojson
Saat ini TinyGlTF adalah mode stabil dan pemeliharaan. Tidak ada perubahan drastis dan penambahan fitur yang direncanakan.
sajson : Gunakan Sajson untuk mengurai JSON. Parsing hanya tetapi waktu kompilasi lebih cepat (pengurangan 2x dibandingkan dengan json.hpp dan rapidjson), tetapi tidak dipertahankan dengan baik. Mungkin sebagian besar fitur-lengkap. Fitur yang hilang terakhir adalah Draco Encoding: #207
json.hpp . .bin . Dalam ekstensi ( ExtensionMap ), nilai angka JSON diuraikan sebagai int atau float (angka) dan disimpan sebagai objek tinygltf::Value . Jika Anda menginginkan nilai titik mengambang dari metode tinygltf::Value , gunakan GetNumberAsDouble() .
IsNumber() mengembalikan true jika nilai yang mendasarinya adalah nilai int atau nilai titik mengambang.
Pengguna yang ingin menjalankan TinyGlTF dengan aman dan aman (misalnya perlu menangani file GLTF malciouse untuk melayani GLTF Conver online), saya sarankan untuk membangun tinygltf untuk target Wasm. Contoh Build Wasi terletak di Wasm.
- Mesin 3D dengan grafik modernextensions dan properti extras animation dan skinTinygltf dilisensikan di bawah lisensi MIT.
Tinygltf menggunakan perpustakaan pihak ketiga berikut.
Salin stb_image.h , stb_image_write.h , json.hpp dan tiny_gltf.h ke proyek Anda.
// 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 untuk melestarikan saluran gambar sebagaimana disimpan dalam file gambar untuk gambar yang dimuat. false secara default untuk kompatibilitas mundur (saluran gambar diluas ke saluran RGBA 4). Efektif hanya saat menggunakan Builtin Image Loader (STB Image Loader). TINYGLTF_NOEXCEPTION : Nonaktifkan pengecualian C ++ dalam parsing JSON. Anda dapat menggunakan -fno-exceptions atau dengan mendefinisikan simbol JSON_NOEXCEPTION dan TINYGLTF_NOEXCEPTION untuk menghapus kode pengecualian C ++ sepenuhnya saat menyusun tinygltf.TINYGLTF_NO_STB_IMAGE : Jangan memuat gambar dengan STB_IMAGE. Alih -alih menggunakan TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data) untuk mengatur panggilan balik untuk memuat gambar.TINYGLTF_NO_STB_IMAGE_WRITE : Jangan menulis gambar dengan stb_image_write. Alih -alih menggunakan TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data) untuk mengatur panggilan balik untuk menulis gambar.TINYGLTF_NO_EXTERNAL_IMAGE : Jangan coba memuat file gambar eksternal. Opsi ini akan membantu jika Anda tidak ingin memuat file gambar selama penguraian GLTF.TINYGLTF_ANDROID_LOAD_FROM_ASSETS : Muat semua file dari aset aplikasi paket alih -alih sistem file biasa. Catatan: Anda harus melewati manajer aset yang valid dari aplikasi Android Anda ke tinygltf::asset_manager sebelumnya.TINYGLTF_ENABLE_DRACO : Aktifkan kompresi draco. Pengguna harus menyediakan pustaka correspnding jalur dan tautan dalam file proyek Anda.TINYGLTF_NO_INCLUDE_JSON : Nonaktifkan termasuk json.hpp dari dalam tiny_gltf.h karena telah dimasukkan sebelumnya atau Anda ingin memasukkannya menggunakan jalur khusus sebelum memasukkan tiny_gltf.h .TINYGLTF_NO_INCLUDE_RAPIDJSON : Nonaktifkan termasuk file header RapidJson dari dalam tiny_gltf.h karena telah dimasukkan sebelumnya atau Anda ingin memasukkannya menggunakan jalur khusus sebelum memasukkan tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE : nonaktifkan termasuk stb_image.h dari dalam tiny_gltf.h karena telah dimasukkan sebelumnya atau Anda ingin memasukkannya menggunakan jalur khusus sebelum memasukkan tiny_gltf.h .TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE : nonaktifkan termasuk stb_image_write.h dari dalam tiny_gltf.h karena telah dimasukkan sebelumnya atau Anda ingin memasukkannya menggunakan jalur khusus sebelum memasukkan tiny_gltf.h .TINYGLTF_USE_RAPIDJSON : Gunakan RapidJson sebagai JSON Parser/Serializer. File RapidJson tidak termasuk dalam repo TinyGlTF. Harap atur Path ke RapidJson jika Anda mengaktifkan fitur ini.TINYGLTF_USE_CPP14 : Gunakan fitur C ++ 14 (membutuhkan kompiler C ++ 14). Ini mungkin memberikan kinerja yang lebih baik daripada C ++ 11. Anda dapat menambahkan tinygltf menggunakan fitur add_subdirectory . Jika Anda menambahkan tinygltf ke proyek Anda menggunakan add_subdirectory , akan lebih baik untuk mengatur TINYGLTF_HEADER_ONLY on (cukup tambahkan path include ke tinygltf) dan TINYGLTF_INSTALL off (yang tidak menginstal file 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)
Diperlukan Python. Git Clone https://github.com/khronosgroup/gltf-sample-odels ke dir lokal Anda.
Setelah membangun loader_example , edit test_runner.py , lalu,
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept Lihat tests/fuzzer untuk detailnya.
Setelah menjalankan fuzzer di Ryzen9 3950x seminggu, setidaknya LoadASCIIFromString terlihat aman kecuali untuk kesalahan out-of-memory di fuzzer. Kami mungkin lebih baik untuk memperkenalkan pemeriksaan ukuran memori terbatas saat mem -parsing data GLTF.