단일 파일/STB 스타일 C GLTF 로더 및 작가
사용 : BGFX, 필라멘트, 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는 기본적으로 버퍼 또는 이미지와 같은 추가 파일의 내용을 메모리에로드하지 않습니다. data.buffers[] 또는 data.images[] 의 URI를 사용 하여이 파일을 직접 읽어야합니다. 버퍼 데이터의 경우 또는 cgltf_load_buffers 호출하여 FILE* API를 사용하여 버퍼 파일을 열고 읽습니다. 이것은 버퍼에서 Base64 데이터 URI를 자동으로 해독합니다. 이미지의 데이터 URI의 경우 cgltf_load_buffer_base64 사용해야합니다.
보다 심층적 인 설명서와 공개 인터페이스에 대한 설명은 cgltf.h 파일의 상단을 참조하십시오.
GLTF 데이터를 작성할 때 유효한 GLTF 문서를 나타내는 유효한 cgltf_data 구조가 필요합니다. 위에서 설명한 로더 기능을 사용하여 이러한 구조를 직접 구성하거나로드 할 수 있습니다. 작가 기능은 메모리를 처리하지 않습니다. 따라서 GLTF 문서에서 데이터를로드하여 데이터를 얻은 경우 수동으로 수행하거나 cgltf_free() 를 호출해야합니다.
파일 작성 :
#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 헤더 파일을 프로젝트에 통합하는 것입니다. 단일 파일 C 라이브러리 (STB 스타일 라이브러리라고도 함)에 익숙하지 않은 경우 다음과 같은 방법입니다.
cgltf.h 포함하십시오.cgltf.h 포함하기 전에 CGLTF_IMPLEMENTATION 정의하는 정확히 하나의 소스 파일이 있습니다. 작문 지원은 cgltf_write.h ( cgltf.h 포함)라는 별도의 파일에서 찾을 수 있습니다. CGLTF_WRITE_IMPLEMENTATION DEFINE을 사용하여 유사하게 작동합니다.
모든 사람은 도서관에 기여할 수 있습니다. 문제가있는 경우 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.
이 라이브러리에는 소스에 내장 된 JSMN JSON 파서 사본이 있습니다.
test/ 폴더에는 Gltf-sample-models 저장소 (https://github.com/khronosgroup/gltf-sample-models/tree/mas
테스트를 구축하고 실행하는 한 가지 방법은 다음과 같습니다.
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
fuzz/ 에는 LLVM-Fuzz 테스트도 있습니다. 자세한 내용은 http://llvm.org/docs/libfuzzer.html을 참조하십시오.