GitHub – jkuhlmann/cgltf: :d iamond_shape_with_a_dot_inside: 用 C99 编写的单文件 glTF 2.0 加载器和写入器
| Name | ||
|---|---|---|
|
A46A111 · last month
|
||
|
|
4 years ago
|
|
|
|
3 years ago
|
|
|
|
last month
|
|
|
|
4 years ago
|
|
|
|
11 months ago
|
|
|
|
last month
|
|
|
|
6 months ago
|
|
存储库文件导航
单文件/stb 样式 C glTF 加载器和写入器
用于: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 自行读取这些文件。 对于缓冲区数据,您也可以调用 ,它将使用 API 打开和读取缓冲区文件。这会自动解码缓冲区中的 base64 数据 URI。对于图像中的数据 URI,您需要使用 .data.buffers[]data.images[]cgltf_load_buffersFILE*cgltf_load_buffer_base64
有关公共接口的更深入的文档和描述,请参阅 cgltf.h 文件的顶部。
写入 glTF 数据时,需要一个表示有效 glTF 文档的有效结构。您可以自己构建这样的结构,也可以使用上述加载器函数加载它。编写器函数不会释放任何内存。因此,您必须手动执行此作,或者通过从 glTF 文档加载数据来调用数据。cgltf_datacgltf_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 扩展:
- EXT_mesh_gpu_instancing
- EXT_meshopt_compression
- EXT_texture_webp
- KHR_draco_mesh_compression(不过需要像 Google 的 Draco 这样的库来解压缩)
- KHR_lights_punctual
- KHR_materials_anisotropy
- KHR_materials_clearcoat
- KHR_materials_diffuse_transmission
- KHR_materials_dispersion
- KHR_materials_emissive_strength
- KHR_materials_ior
- KHR_materials_iridescence
- KHR_materials_pbrSpecularGlossiness
- KHR_materials_sheen
- KHR_materials_specular
- KHR_materials_transmission
- KHR_materials_unlit
- KHR_materials_variants
- KHR_materials_volume
- KHR_texture_basisu(需要像 Binomial Basisu 这样的库来转码到原生压缩纹理)
- KHR_texture_transform
CGLTF 尚不支持未列出的扩展。但是,可以通过对象上的“extensions”成员访问未列出的扩展。
最简单的方法是将头文件集成到项目中。如果您不熟悉单文件 C 库(也称为 stb 样式库),它是这样进行的:cgltf.h
- 包括您需要该功能的位置。
cgltf.h - 在包含 之前,只有一个定义的源文件。
CGLTF_IMPLEMENTATIONcgltf.h - 如上所述使用 cgltf 函数。
可以在一个名为 (其中包括) 的单独文件中找到对写入的支持。使用 define 构建它的工作方式类似。cgltf_write.hcgltf.hCGLTF_WRITE_IMPLEMENTATION
欢迎大家为图书馆做出贡献。如果发现任何问题,可以使用 GitHub 的 issue 系统提交。如果你想贡献代码,你应该分叉项目,然后发送拉取请求。
没有。
实现正在使用的 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 脚本,用于从 glTF-Sample-Models 存储库 (https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0) 检索 glTF 2.0 示例文件,并针对所有 gltf 和 glb 文件运行该库。test/
下面是构建和运行测试的一种方法:
cd test ; mkdir build ; cd build ; cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j
cd ..
./test_all.py
中还有一个 llvm-fuzz 测试。有关详细信息,请参阅 http://llvm.org/docs/LibFuzzer.html。fuzz/
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 用 C99 编写的单文件 glTF 2.0 加载器和写入器
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办