• 正文概述
  • GitHub – jkuhlmann/cgltf: :d iamond_shape_with_a_dot_inside: 用 C99 编写的单文件 glTF 2.0 加载器和写入器

    存储库文件导航

    💠 CGLTF

    单文件/stb 样式 C glTF 加载器和写入器

    构建状态

    用于:bgfxFilamentgltfpackraylibUnigine 等!

    用法:加载

    从文件加载:

    #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:

    • glb(二进制文件)和 gltf(JSON 文件)
    • 网格(包括访问器、缓冲区视图、缓冲区)
    • 材质(包括纹理、采样器、图像)
    • 场景和节点
    • 皮肤
    • 动画
    • 相机
    • 变形目标
    • 附加数据

    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

    1. 包括您需要该功能的位置。cgltf.h
    2. 在包含 之前,只有一个定义的源文件。CGLTF_IMPLEMENTATIONcgltf.h
    3. 如上所述使用 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.htmlfuzz/

    大约

    💠 用 C99 编写的单文件 glTF 2.0 加载器和写入器

    主题

    资源

    许可证

    星星

    观察家

    释放16

    CGLTF v1.15最近的
    on Feb 10

    未发布包
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 用 C99 编写的单文件 glTF 2.0 加载器和写入器

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载要提取码
    百度网盘提取码都是gltf。
    分享过期和重复下载怎么办
    分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
    模型和平台不兼容怎么办
    可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
    开通VIP 享更多特权,建议使用 QQ 登录