Chardeur et écrivain GLTF de style Single-File / STB
Utilisé dans: BGFX, Filament, Gltfpack, Raylib, Unigine, et plus encore!
Chargement à partir du fichier:
#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 );
}Chargement de la mémoire:
#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 );
} Notez que CGLTF ne charge pas le contenu de fichiers supplémentaires tels que les tampons ou les images en mémoire par défaut. Vous devrez lire ces fichiers vous-même à l'aide d'Uris à partir respectivement de data.buffers[] ou data.images[] . Pour les données de tampon, vous pouvez également appeler cgltf_load_buffers , qui utilisera les API de FILE* pour ouvrir et lire les fichiers tampons. Cela décode automatiquement les URI de données Base64 dans les tampons. Pour les URI de données dans les images, vous devrez utiliser cgltf_load_buffer_base64 .
Pour une documentation plus approfondie et une description de l'interface publique, reportez-vous au haut du fichier cgltf.h .
Lorsque vous écrivez des données GLTF, vous avez besoin d'une structure cgltf_data valide qui représente un document GLTF valide. Vous pouvez construire une telle structure vous-même ou le charger en utilisant les fonctions de chargeur décrites ci-dessus. Les fonctions de l'écrivain ne traitent aucune mémoire. Ainsi, vous devez soit le faire manuellement, soit appeler cgltf_free() si vous obtenez les données en le chargeant à partir d'un document GLTF.
Écriture dans le fichier:
#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 */
}Écriture en mémoire:
#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 */
}Notez que CGLTF n'écrit pas le contenu de fichiers supplémentaires tels que des tampons ou des images. Vous devrez rédiger ces données vous-même.
Pour une documentation plus approfondie et une description de l'interface publique, reportez-vous au haut du fichier cgltf_write.h .
CGLTF prend en charge Core GLTF 2.0:
CGLTF prend également en charge certaines extensions GLTF:
CGLTF ne prend pas encore en charge les extensions non répertoriées. Cependant, les extensions non répertoriées sont accessibles via un membre "Extensions" sur les objets.
L'approche la plus simple consiste à intégrer le fichier d'en-tête cgltf.h dans votre projet. Si vous n'êtes pas familier avec les bibliothèques C unique (également connues sous le nom de bibliothèques de style STB), c'est ainsi que cela se passe:
cgltf.h où vous avez besoin des fonctionnalités.CGLTF_IMPLEMENTATION AVANT INCLURER cgltf.h . La prise en charge de l'écriture peut être trouvée dans un fichier séparé appelé cgltf_write.h (qui comprend cgltf.h ). Le construire fonctionne de manière analogue à l'aide de la définition CGLTF_WRITE_IMPLEMENTATION .
Tout le monde est invité à contribuer à la bibliothèque. Si vous trouvez des problèmes, vous pouvez les soumettre à l'aide du système de problèmes de GitHub. Si vous souhaitez contribuer du code, vous devez débarquer le projet, puis envoyer une demande de traction.
Aucun.
C en-têtes utilisés par la mise en œuvre:
#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.
Remarque, cette bibliothèque a une copie de l'analyseur JSMN JSON intégré à sa source.
Il y a un script Python dans le test/ dossier qui récupère les exemples de fichiers GLTF 2.0 du référentiel GLTF-échantillon-models (https://github.com/khronosgroup/Gltf-sample-models/tree/master/2.0) et exécute la bibliothèque contre tous les fichiers GLTF et GLB.
Voici une façon de construire et d'exécuter le test:
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
Il existe également un test LLVM-Fuzz dans fuzz/ . Voir http://llvm.org/docs/libfuzzer.html pour plus d'informations.