シングルファイル/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[]のurisを使用して自分で読み取る必要があります。バッファデータの場合、 cgltf_load_buffersを呼び出すことができます。これは、 FILE* apisを使用してバッファファイルを開き、読み取ります。これにより、バッファーで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はコアGLTF 2.0をサポートしています:
CGLTFは、いくつかのGLTF拡張機能もサポートしています。
CGLTFは、非公開の拡張機能をまだサポートしていません。ただし、オブジェクト上の「拡張機能」メンバーを介して、非公開の拡張機能にアクセスできます。
最も簡単なアプローチは、 cgltf.hヘッダーファイルをプロジェクトに統合することです。シングルファイルCライブラリ(STBスタイルのライブラリとも呼ばれます)に不慣れな場合、これは次の方法です。
cgltf.hを含めます。cgltf.hを含む前に、 CGLTF_IMPLEMENTATIONを定義するソースファイルが1つあります。執筆のサポートは、 cgltf_write.h ( cgltf.hを含む)と呼ばれる別のファイルにあります。構築は、 CGLTF_WRITE_IMPLEMENTATION DEFINESを使用して同様に機能します。
誰もが図書館に貢献できます。問題がある場合は、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/ Folderには、GLTF-Sample-modelsリポジトリ(https://github.com/khronosgroup/gltf-sample-models/tree/master/2.0)からGLTF 2.0サンプルファイルを取得し、すべてのGLTFおよびGLBファイルに対してライブラリを実行するPythonスクリプトがあります。
テストを構築および実行する1つの方法は次のとおりです。
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
fuzz/にはLLVMファズテストもあります。詳細については、http://llvm.org/docs/libfuzzer.htmlを参照してください。