TinyGLTF ist nur ein Header C ++ 11 Gltf 2.0 https://github.com/khronosgroup/gltf Library.
TinyGLTF verwendet Niels Lohmanns JSON -Bibliothek (https://github.com/nlohmann/json), daher benötigt es jetzt C ++ 11 Compiler. (Außerdem können Sie Radpidjson als JSON-Backend verwenden.) Wenn Sie nach alter C ++ 03-Version suchen, verwenden Sie bitte devel-picojson Zweig (aber nicht mehr gewartet).
Derzeit ist TinyGLTF stabil und Wartungsmodus. Keine drastischen Änderungen und Feature -Ergänzungen geplant.
sajson : Verwenden Sie Sajson, um Json zu analysieren. Nur analysieren, aber schneller Kompilierungszeit (2x Reduktion im Vergleich zu JSON.HPP und Rapidjson), aber nicht gut gepflegt. Wahrscheinlich meist mit Feature-Complete. Das letzte fehlende Feature ist Draco Coding: #207
json.hpp nicht kompilieren konnten. .bin In der Erweiterung ( ExtensionMap ) wird der JSON -Zahlenwert als int oder float (number) analysiert und als tinygltf::Value -Objekt gespeichert. Wenn Sie einen schwimmenden Punktwert von tinygltf::Value wünschen, verwenden Sie GetNumberAsDouble() -Methode.
IsNumber() gibt true zurück, wenn der zugrunde liegende Wert ein int -Wert oder ein schwimmender Punktwert ist.
Benutzer, die TinyGltf sicher und sicher ausführen möchten (z. B. müssen die malte GLTF -Datei für Online -GLTF -Konvers erstellen), empfehle ich, TinyGltf für WASM -Ziel zu erstellen. Das Beispiel für Wasi -Build befindet sich in WASM.
- 3D -Engine mit modernen Grafikenextensions und extras animation und skinTinyGLTF ist unter MIT -Lizenz lizenziert.
TinyGlTF verwendet die folgenden Bibliotheken Dritter.
Kopieren Sie stb_image.h , stb_image_write.h , json.hpp und tiny_gltf.h zu Ihrem Projekt.
// 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 , um Bildkanäle zu erhalten, die in der Bilddatei für geladenes Bild gespeichert sind. Standardmäßig false für die Rückwärtskompatibilität (Bildkanäle sind auf RGBA 4 -Kanäle erweitert). Effektiv nur bei Verwendung von integriertem Bildlader (STB -Bildlader). TINYGLTF_NOEXCEPTION : Deaktivieren Sie die C ++ - Ausnahme in JSON Parsing. Sie können -fno-exceptions oder durch Definieren des Symbols JSON_NOEXCEPTION und TINYGLTF_NOEXCEPTION verwenden, um C ++ -Ausnahmecodes beim Kompilieren von TinyGltf vollständig zu entfernen.TINYGLTF_NO_STB_IMAGE : Laden Sie keine Bilder mit STB_IMAGE. Verwenden Sie stattdessen TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data) um einen Rückruf zum Laden von Bildern festzulegen.TINYGLTF_NO_STB_IMAGE_WRITE : Schreiben Sie keine Bilder mit STB_IMAGE_WRITE. Verwenden Sie stattdessen TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data) um einen Rückruf für das Schreiben von Bildern festzulegen.TINYGLTF_NO_EXTERNAL_IMAGE : Versuchen Sie nicht, die externe Bilddatei zu laden. Diese Option wäre hilfreich, wenn Sie während der GLTF -Parsen keine Bilddateien laden möchten.TINYGLTF_ANDROID_LOAD_FROM_ASSETS : Laden Sie alle Dateien aus verpackten App -Assets anstelle des regulären Dateisystems. Hinweis: Sie müssen im Voraus einen gültigen Asset -Manager von Ihrer Android -App an tinygltf::asset_manager übergeben.TINYGLTF_ENABLE_DRACO : Aktivieren Sie die Draco -Komprimierung. Der Benutzer muss in Ihrer Projektdatei Pfad- und Verknüpfungsbibliotheken enthalten.TINYGLTF_NO_INCLUDE_JSON : Deaktivieren Sie inklusive json.hpp von innerhalb von tiny_gltf.h , da es bereits vorhanden ist oder Sie es mit benutzerdefinierten Pfad einfügen möchten, bevor Sie tiny_gltf.h einbeziehen.TINYGLTF_NO_INCLUDE_RAPIDJSON : Deaktivieren Sie die Header -Dateien von Rapidjson aus tiny_gltf.h , da es bereits vorhanden ist oder Sie es mit benutzerdefiniertem Pfad einfügen möchten, bevor Sie tiny_gltf.h einschließen.TINYGLTF_NO_INCLUDE_STB_IMAGE : Deaktivieren Sie inklusive stb_image.h von in tiny_gltf.h , da es bereits vorhanden ist oder Sie es mit benutzerdefiniertem Pfad einfügen möchten, bevor Sie tiny_gltf.h einschließen.TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE : Deaktivieren Sie inklusive stb_image_write.h von innerhalb tiny_gltf.h , da es bereits vorhanden ist oder Sie es mit benutzerdefiniertem Pfad einschließen möchten, bevor Sie tiny_gltf.h einbeziehen möchten.TINYGLTF_USE_RAPIDJSON : Verwenden Sie Rapidjson als JSON -Parser/Serializer. Rapidjson -Dateien sind nicht in TinyGltf Repo enthalten. Bitte setzen Sie einen Pfad für Rapidjson ein, wenn Sie diese Funktion aktivieren.TINYGLTF_USE_CPP14 : Verwenden Sie C ++ 14 Feature (benötigt C ++ 14 Compiler). Dies kann eine bessere Leistung bieten als C ++ 11. Sie können TinyGltf mit add_subdirectory -Funktion hinzufügen. Wenn Sie Ihr Projekt mit add_subdirectory zu Ihrem Projekt hinzufügen, ist es besser, TINYGLTF_HEADER_ONLY einzustellen (fügen Sie einfach einen Pfad in TinyGltf hinzu) und TINYGLTF_INSTALL aus (was keine Tinygltf -Dateien installiert).
// 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 erforderlich. Git Clone https://github.com/khronosgroup/gltf-sample-models zu Ihrem lokalen Dir.
Nach dem Erstellen von loader_example test_runner.py , dann,
$ python test_runner.py$ cd tests
$ make
$ ./tester
$ ./tester_noexcept Weitere Informationen finden Sie unter tests/fuzzer .
Nach dem Fuzzer auf Ryzen9 3950x pro Woche sieht LoadASCIIFromString mit Ausnahme des außerem Memory-Fehlers im Fuzezer sicher aus. Möglicherweise können wir bessere Überprüfungen der begrenzten Speichergröße bei der Parsen von GLTF -Daten einführen.