• 正文概述
  • 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/

    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 登录