File dan penulis file tunggal/stb-style dan style cltf
Digunakan dalam: bgfx, filamen, gltfpack, raylib, unigine, dan banyak lagi!
Memuat dari file:
#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 );
}Memuat dari memori:
#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 );
} Perhatikan bahwa CGLTF tidak memuat isi file tambahan seperti buffer atau gambar ke dalam memori secara default. Anda harus membaca file -file ini sendiri menggunakan URI dari data.buffers[] atau data.images[] . Untuk data buffer, Anda dapat memanggil cgltf_load_buffers , yang akan menggunakan FILE* API untuk membuka dan membaca file buffer. Ini secara otomatis mendekode Base64 data URI dalam buffer. Untuk data URI dalam gambar, Anda perlu menggunakan cgltf_load_buffer_base64 .
Untuk dokumentasi yang lebih mendalam dan deskripsi antarmuka publik merujuk ke bagian atas file cgltf.h .
Saat menulis data GLTF, Anda memerlukan struktur cgltf_data yang valid yang mewakili dokumen GLTF yang valid. Anda dapat membangun sendiri struktur seperti itu atau memuatnya menggunakan fungsi loader yang dijelaskan di atas. Fungsi penulis tidak menangani memori apa pun. Jadi, Anda harus melakukannya secara manual atau memanggil cgltf_free() jika Anda mendapatkan data dengan memuatnya dari dokumen GLTF.
Menulis ke File:
#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 */
}Menulis ke Memori:
#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 */
}Perhatikan bahwa CGLTF tidak menulis konten file tambahan seperti buffer atau gambar. Anda harus menulis data ini sendiri.
Untuk dokumentasi yang lebih mendalam dan deskripsi antarmuka publik merujuk ke bagian atas file cgltf_write.h .
CGLTF Mendukung Core GLTF 2.0:
CGLTF juga mendukung beberapa ekstensi GLTF:
CGLTF belum mendukung ekstensi yang tidak terdaftar. Namun, ekstensi yang tidak terdaftar dapat diakses melalui anggota "ekstensi" pada objek.
Pendekatan termudah adalah mengintegrasikan file header cgltf.h ke dalam proyek Anda. Jika Anda tidak terbiasa dengan perpustakaan C tunggal C (juga dikenal sebagai perpustakaan gaya STB), beginilah caranya:
cgltf.h di mana Anda membutuhkan fungsionalitas.CGLTF_IMPLEMENTATION sebelum memasukkan cgltf.h . Dukungan untuk menulis dapat ditemukan dalam file terpisah yang disebut cgltf_write.h (yang termasuk cgltf.h ). Membangunnya berfungsi secara analog menggunakan define CGLTF_WRITE_IMPLEMENTATION .
Setiap orang dipersilakan untuk berkontribusi ke perpustakaan. Jika Anda menemukan masalah, Anda dapat mengirimkannya menggunakan sistem masalah GitHub. Jika Anda ingin menyumbangkan kode, Anda harus membayar proyek dan kemudian mengirim permintaan tarik.
Tidak ada.
C header yang digunakan oleh implementasi:
#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.
Catatan, perpustakaan ini memiliki salinan JSMN JSON Parser yang tertanam di sumbernya.
Ada skrip python di test/ folder yang mengambil file sampel GLTF 2.0 dari repositori GLTF-Sample-Models (https://github.com/khronosgroup/gltf-sample-odels/tree/master/2.0) dan menjalankan perpustakaan terhadap semua file GLTF dan GLB.
Inilah salah satu cara untuk membangun dan menjalankan tes:
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
Ada juga tes LLVM-Fuzz di fuzz/ . Lihat http://llvm.org/docs/libfuzzer.html untuk informasi lebih lanjut.