CLTF-Lader und Schriftsteller im Stil von Einzel-Dateien/STB im Stil
Verwendet in: BGFX, Filament, Gltfpack, Raylib, Unigine und mehr!
Laden aus der Datei:
#define CGLTF_IMPLEMENTATION
#include "cgltf.h"
cgltf_options options = { 0 };
cgltf_data * data = NULL ;
cgltf_result result = cgltf_parse_file ( & options , "scene.gltf" , & data );
if ( result == cgltf_result_success )
{
/* TODO make awesome stuff */
cgltf_free ( data );
}Laden aus dem Speicher:
#define CGLTF_IMPLEMENTATION
#include "cgltf.h"
void * buf ; /* Pointer to glb or gltf file data */
size_t size ; /* Size of the file data */
cgltf_options options = { 0 };
cgltf_data * data = NULL ;
cgltf_result result = cgltf_parse ( & options , buf , size , & data );
if ( result == cgltf_result_success )
{
/* TODO make awesome stuff */
cgltf_free ( data );
} Beachten Sie, dass CGLTF den Inhalt zusätzlicher Dateien wie Puffer oder Bilder standardmäßig nicht in Speicher lädt. Sie müssen diese Dateien selbst verwenden data.images[] indem Sie URIs aus data.buffers[] verwenden. Für Pufferdaten können Sie alternativ cgltf_load_buffers aufrufen, mit denen FILE* -APIs zum Öffnen und Lesen von Pufferdateien verwendet werden. Dies dekodiert automatisch Base64 -Daten -URIs in Puffer. Für Daten -URIs in Bildern müssen Sie cgltf_load_buffer_base64 verwenden.
Eine eingehende Dokumentation und eine Beschreibung der öffentlichen Schnittstelle finden Sie unter der Oberseite der Datei cgltf.h .
Beim Schreiben von GLTF -Daten benötigen Sie eine gültige cgltf_data -Struktur, die ein gültiges GLTF -Dokument darstellt. Sie können eine solche Struktur selbst erstellen oder sie unter Verwendung der oben beschriebenen Laderfunktionen laden. Die Funktionen der Schriftstellerin verarbeiten keine Erinnerung. Sie müssen es also entweder manuell tun oder cgltf_free() aufrufen, wenn Sie die Daten erhalten haben, indem Sie sie aus einem GLTF -Dokument geladen haben.
Schreiben in Datei:
#define CGLTF_IMPLEMENTATION
#define CGLTF_WRITE_IMPLEMENTATION
#include "cgltf_write.h"
cgltf_options options = { 0 };
cgltf_data * data = /* TODO must be valid data */ ;
cgltf_result result = cgltf_write_file ( & options , "out.gltf" , data );
if ( result != cgltf_result_success )
{
/* TODO handle error */
}Schreiben in die Erinnerung:
#define CGLTF_IMPLEMENTATION
#define CGLTF_WRITE_IMPLEMENTATION
#include "cgltf_write.h"
cgltf_options options = { 0 };
cgltf_data * data = /* TODO must be valid data */ ;
cgltf_size size = cgltf_write ( & options , NULL , 0 , data );
char * buf = malloc ( size );
cgltf_size written = cgltf_write ( & options , buf , size , data );
if ( written != size )
{
/* TODO handle error */
}Beachten Sie, dass CGLTF den Inhalt zusätzlicher Dateien wie Puffer oder Bilder nicht schreibt. Sie müssen diese Daten selbst schreiben.
Eine eingehende Dokumentation und eine Beschreibung der öffentlichen Schnittstelle finden Sie unter der Oberseite der Datei cgltf_write.h .
CGLTF unterstützt Core GLTF 2.0:
CGLTF unterstützt auch einige GLTF -Erweiterungen:
CGLTF unterstützt noch keine nicht gelisteten Erweiterungen. Auf unbekannte Erweiterungen können jedoch über "Erweiterungen" -Mitglied auf Objekten zugegriffen werden.
Der einfachste Ansatz ist die Integration der cgltf.h -Header -Datei in Ihr Projekt. Wenn Sie mit Single-File-C-Bibliotheken (auch als STB-Bibliotheken bekannt) nicht vertraut sind, ist es so, wie es geht:
cgltf.h hinzu, wo Sie die Funktionalität benötigen.CGLTF_IMPLEMENTATION definiert, bevor cgltf.h einbezogen wird. Die Unterstützung für das Schreiben finden Sie in einer separaten Datei namens cgltf_write.h (einschließlich cgltf.h ). Das Erstellen von IT funktioniert analog mit der Define CGLTF_WRITE_IMPLEMENTATION .
Jeder ist herzlich eingeladen, in die Bibliothek beizutragen. Wenn Sie Probleme finden, können Sie sie mit dem Github -Ausgabesystem einreichen. Wenn Sie Code beitragen möchten, sollten Sie das Projekt aufgeben und dann eine Pull -Anfrage senden.
Keiner.
C Header, die von der Implementierung verwendet werden:
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <assert.h> // If asserts are enabled.
Beachten Sie, dass diese Bibliothek eine Kopie des JSMN JSON -Parsers in seiner Quelle enthält.
Im test/ Ordner befindet sich ein Python-Skript, in dem die Beispieldateien GLTF 2.0 aus dem GLTF-Sampier-Models-Repository (https://github.com/khronosgroup/GLTF-Sample-models/tree/master/2.0) abgerufen werden.
Hier ist eine Möglichkeit, den Test zu bauen und durchzuführen:
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
Es gibt auch einen LLVM-Fuzz-Test in fuzz/ . Weitere Informationen finden Sie unter http://llvm.org/docs/libfuzzer.html.