เครื่องโหลดและนักเขียนแบบ C Single-File/STB
ใช้ใน: 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 ไม่โหลดเนื้อหาของไฟล์พิเศษเช่นบัฟเฟอร์หรือรูปภาพลงในหน่วยความจำโดยค่าเริ่มต้น คุณจะต้องอ่านไฟล์เหล่านี้ด้วยตัวเองโดยใช้ uris จาก data.buffers[] หรือ data.images[] ตามลำดับ สำหรับข้อมูลบัฟเฟอร์คุณสามารถเรียก cgltf_load_buffers ซึ่งจะใช้ FILE* APIs เพื่อเปิดและอ่านไฟล์บัฟเฟอร์ สิ่งนี้จะถอดรหัสข้อมูล Base64 โดยอัตโนมัติในบัฟเฟอร์ สำหรับข้อมูล uris ในรูปภาพคุณจะต้องใช้ 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 ลงในโครงการของคุณ หากคุณไม่คุ้นเคยกับไลบรารีไฟล์ C เดียว (หรือที่เรียกว่าห้องสมุดสไตล์ 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.
หมายเหตุไลบรารีนี้มีสำเนาของตัวแยกวิเคราะห์ JSMN JSON ที่ฝังอยู่ในแหล่งที่มา
มีสคริปต์ Python ใน test/ โฟลเดอร์ที่ดึงไฟล์ตัวอย่าง GLTF 2.0 จากที่เก็บข้อมูล GLTF-Sample-Models (https://github.com/khronosgroup/gltf-sample-models/tree/master/2.0)
นี่เป็นวิธีหนึ่งในการสร้างและเรียกใช้การทดสอบ:
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 สำหรับข้อมูลเพิ่มเติม