Одиночный/Stb-стиль C GLTF Loader and Writer
Используется в: BGFX, Filament, GLTFPACK, Raylib, Unigine и многое другое!
Загрузка из файла:
#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 );
}Загрузка из памяти:
#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 );
} Обратите внимание, что CGLTF не загружает содержимое дополнительных файлов, таких как буферы или изображения в память по умолчанию. Вам нужно будет прочитать эти файлы самостоятельно, используя URI из data.buffers[] или data.images[] соответственно. Для данных буфера вы можете альтернативно вызвать cgltf_load_buffers , который будет использовать API -интерфейсы FILE* для открытия и чтения буферных файлов. Это автоматически декодирует Base64 Data URI в буфере. Для данных URI на изображениях вам нужно будет использовать cgltf_load_buffer_base64 .
Для более подробной документации и описания публичного интерфейса относятся к вершине файла cgltf.h .
При написании данных GLTF вам нужна действующая структура cgltf_data , которая представляет собой действительный документ GLTF. Вы можете построить такую структуру самостоятельно или загрузить ее, используя функции загрузчика, описанные выше. Функции писателя не разбираются в памяти. Таким образом, вы должны либо сделать это вручную, либо позвонить в cgltf_free() если вы получили данные, загрузив их из документа GLTF.
Написание в файл:
#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 */
}Написание в память:
#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 */
}Обратите внимание, что CGLTF не пишет содержимое дополнительных файлов, таких как буферы или изображения. Вам нужно будет написать эти данные самостоятельно.
Для более подробной документации и описания публичного интерфейса см. В верхней части файла cgltf_write.h .
CGLTF поддерживает Core GLTF 2.0:
CGLTF также поддерживает некоторые расширения GLTF:
CGLTF еще не поддерживает незаконные расширения. Тем не менее, нерегистрированные расширения могут быть доступны через член «расширения» на объектах.
Самый простой подход - интеграция файла заголовка cgltf.h в ваш проект. Если вы не знакомы с библиотеками с одним файлом (также известными как библиотеки в стиле STB), так и идет:
cgltf.h , где вам нужна функциональность.CGLTF_IMPLEMENTATION , прежде чем включать cgltf.h . Поддержка письма можно найти в отдельном файле с именем cgltf_write.h (который включает в себя cgltf.h ). Создание его работает аналогично, используя определение CGLTF_WRITE_IMPLEMENTATION .
Все могут внести свой вклад в библиотеку. Если вы найдете какие -либо проблемы, вы можете отправить их, используя систему проблем Github. Если вы хотите внести код, вам следует разобраться в проекте, а затем отправить запрос на вытяжение.
Никто.
C заголовки используются в реализации:
#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.
Обратите внимание, что в этой библиотеке есть копия диапазона JSON JSON JSON, встроенного в его источник.
В test/ папке есть скрипт Python, который извлекает образцы файлов GLTF 2.0 из репозитория GLTF-Sample-Models (https://github.com/kronosgroup/gltf-models/tree/master/2.0) и запускает библиотеку по всем файлам GLTF и GLB.
Вот один из способов построить и запустить тест:
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
Существует также тест LLVM-Fuzz в fuzz/ . См. Http://llvm.org/docs/libfuzzer.html для получения дополнительной информации.