• 正文概述
  • GitHub – syoyo/tinygltf:仅标头 C++11 小型 glTF 2.0 库

    Name
    2 years ago
    3 years ago
    9 years ago
    last year
    7 years ago
    last year
    last year
    8 years ago
    2 years ago
    9 years ago
    2 years ago
    last year
    8 years ago
    6 years ago
    5 months ago
    7 years ago
    7 years ago
    4 years ago
    3 years ago
    8 years ago
    2 years ago
    2 years ago
    3 years ago
    5 years ago
    5 months ago
    8 years ago

    存储库文件导航

    标头 C++ 小 glTF 库(加载器/保护程序)。

    TinyGLTF是仅标头 C++11 glTF 2.0 https://github.com/KhronosGroup/glTF 库。

    TinyGLTF使用 Niels Lohmann 的 json 库 (https://github.com/nlohmann/json),所以现在它需要 C++11 编译器。 (此外,您可以使用 RadpidJSON 作为 JSON 后端) 如果您正在寻找旧的 C++03 版本,请使用 branch(但不再维护)。devel-picojson

    地位

    目前TinyGLTF处于稳定和维护模式。没有计划进行重大更改和功能添加。

    • v2.9.0 各种修复和改进。文件系统回调 API 更改。
    • v2.8.0 添加 URICallbacks,用于在 Buffer 和 Image 中进行自定义 URI 处理。PR#397
    • v2.7.0 更改 WriteImageDataFunction 用户回调函数签名。PR#393
    • v2.6.0 支持序列化稀疏访问器(感谢 @fynv)。
    • v2.5.0 添加 SetPreserveImageChannels() 选项,按原样加载图像数据。
    • v2.4.0 实验性 RapidJSON 支持。实验性 C++14 支持(C++14 可能会提供更好的性能)
    • v2.3.0 根据 glTF 2.0 模式修改了材质表示(并引入了 TextureInfo 类)
    • v2.2.0 发布(支持加载 16bit PNG。稀疏访问器支持)
    • v2.1.0 版本(支持 Draco 解码)
    • v2.0.0 发布(2018 年 8 月 22 日)!

    分支

    • sajson:使用 sajson 解析 JSON。仅解析但编译时间更快(与 json.hpp 和 RapidJson 相比减少 2 倍),但维护不好。

    建立

    生成状态

    C/C++ CI

    特征

    可能大部分功能齐全。最后一个缺失的功能是 Draco 编码:https://github.com/syoyo/tinygltf/issues/207

    • 用可移植的 C++ 编写。仅具有 STL 依赖项的 C++-11。
      • macOS + clang(LLVM)
      • iOS + 叮当
      • Linux + gcc/clang
      • Windows + MinGW
      • Windows + Visual Studio 2015 Update 3 或更高版本。
        • 不支持 Visual Studio 2013,因为它们对 C++11 的支持有限,并且无法编译。json.hpp
      • 安卓NDK
      • Android + CrystaX(NDK 直接替换)GCC
      • 使用 Emscripten(LLVM) 的 Web
    • 适度的解析时间和内存消耗。
    • glTF 规范 v2.0.0
      • ASCII glTF
        • 负荷
      • 二进制 glTF(GLB)
        • 负荷
        • Save(.bin嵌入的 .glb)
    • 缓冲区
      • 解析 BASE64 编码的嵌入式缓冲区数据 (DataURI)。
      • 加载文件。.bin
    • 图像(使用stb_image)
      • 解析 BASE64 编码的嵌入图像数据 (DataURI)。
      • 加载外部图像文件。
      • 加载 PNG(8 位和 16 位)
      • 加载 JPEG(仅限 8 位)
      • 负载BMP
      • 加载 GIF
      • 自定义图像解码器回调(例如用于解码 OpenEXR 图像)
    • 变形特拉吉特
      • 稀疏访问器
    • 从内存加载 glTF
    • 自定义回调处理程序
      • 图像加载
      • 图片保存
    • 扩展
      • Draco 网格解码
      • Draco 网格编码

    关于扩展属性的说明

    在 extension() 中,JSON 数字值被解析为 int 或 float(number) 并存储为 object。如果您想要来自 的浮点值,请使用方法。ExtensionMaptinygltf::Valuetinygltf::ValueGetNumberAsDouble()

    IsNumber()如果基础值是 int 值或浮点值,则返回 true。

    例子

    • glview :简单的 glTF 几何查看器。
    • validator :带有 JSON 模式的简单 glTF 验证器。
    • 基本 :支持纹理的基本 glTF 查看器。
    • build-gltf :从头开始构建简单的 glTF 场景。

    WASI/WASM 构建

    想要安全可靠地运行 TinyGLTF 的用户(例如,需要处理恶意的 glTF 文件来提供在线 glTF 转换器), 我建议为 WASM 目标构建 TinyGLTF。 WASI 构建示例位于 wasm 中。

    使用 TinyGLTF 的项目

    待办事项

    • 强大的 URI 解码/编码。https://github.com/syoyo/tinygltf/issues/369
    • 网格压缩/解压缩(Open3DGC等)
      • 加载 Draco 压缩网格
      • 保存 Draco 压缩网格
      • 打开3DGC?
    • 支持和财产extensionsextras
    • HDR 图像?
      • 通过 TinyEXR 进行 OpenEXR 扩展。
    • 序列化中的 16 位 PNG 支持
    • 编写示例和测试 和animationskin

    自选

    • 编写 C++ 代码生成器,从 JSON 模式发出 C++ 代码以进行稳健解析?

    许可证

    TinyGLTF 根据 MIT 许可获得许可。

    TinyGLTF 使用以下第三方库。

    • json.hpp:版权所有 (c) 2013-2017 Niels Lohmann。麻省理工学院执照。
    • base64 : 版权所有 (C) 2004-2008 René Nyffenegger
    • stb_image.h : v2.08 – 公共领域图像加载器 – Github link
    • stb_image_write.h : v1.09 – 公共领域图像编写器 – Github 链接

    生成和示例

    将 、 和 复制到项目中。stb_image.hstb_image_write.hjson.hpptiny_gltf.h

    加载 glTF 2.0 模型

    // Define these only in *one* .cc file.
    #define TINYGLTF_IMPLEMENTATION
    #define STB_IMAGE_IMPLEMENTATION
    #define STB_IMAGE_WRITE_IMPLEMENTATION
    // #define TINYGLTF_NOEXCEPTION // optional. disable exception handling.
    #include "tiny_gltf.h"
    
    using namespace tinygltf;
    
    Model model;
    TinyGLTF loader;
    std::string err;
    std::string warn;
    
    bool ret = loader.LoadASCIIFromFile(&model, &err, &warn, argv[1]);
    //bool ret = loader.LoadBinaryFromFile(&model, &err, &warn, argv[1]); // for binary glTF(.glb)
    
    if (!warn.empty()) {
      printf("Warn: %sn", warn.c_str());
    }
    
    if (!err.empty()) {
      printf("Err: %sn", err.c_str());
    }
    
    if (!ret) {
      printf("Failed to parse glTFn");
      return -1;
    }

    装载机选项

    • TinyGLTF::SetPreserveimageChannels(bool onoff). 保留存储在图像文件中的图像通道,以便加载图像。 默认情况下,为了向后兼容(图像通道加宽到 4 个通道)。仅在使用内置图像加载器(STB 图像加载器)时有效。truefalseRGBA

    编译选项

    • TINYGLTF_NOEXCEPTION:在 JSON 解析中禁用 C++ 异常。在编译 TinyGLTF 时,您可以使用 或 通过定义符号并完全删除 C++ 异常代码。-fno-exceptionsJSON_NOEXCEPTIONTINYGLTF_NOEXCEPTION
    • TINYGLTF_NO_STB_IMAGE:请勿加载带有stb_image的图像。相反,用于设置用于加载图像的回调。TinyGLTF::SetImageLoader(LoadimageDataFunction LoadImageData, void *user_data)
    • TINYGLTF_NO_STB_IMAGE_WRITE:请勿使用stb_image_write书写图像。相反,用于设置用于写入图像的回调。TinyGLTF::SetImageWriter(WriteimageDataFunction WriteImageData, void *user_data)
    • TINYGLTF_NO_EXTERNAL_IMAGE:请勿尝试加载外部图像文件。如果您不想在 glTF 解析期间加载图像文件,此选项将很有帮助。
    • TINYGLTF_ANDROID_LOAD_FROM_ASSETS:从打包的应用程序资产而不是常规文件系统加载所有文件。注意:您必须事先将有效的资产管理器从 Android 应用传递给。tinygltf::asset_manager
    • TINYGLTF_ENABLE_DRACO:启用 Draco 压缩。用户必须在项目文件中提供包含路径和链接对应库。
    • TINYGLTF_NO_INCLUDE_JSON :从内部禁用包含,因为它之前已经包含,或者您想在包含之前使用自定义路径包含它。json.hpptiny_gltf.htiny_gltf.h
    • TINYGLTF_NO_INCLUDE_RAPIDJSON :从内部禁用包含 RapidJson 的头文件,因为它之前已经包含过,或者您想在包含之前使用自定义路径包含它。tiny_gltf.htiny_gltf.h
    • TINYGLTF_NO_INCLUDE_STB_IMAGE :从内部禁用包含,因为它之前已经包含,或者您想在包含之前使用自定义路径包含它。stb_image.htiny_gltf.htiny_gltf.h
    • TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE :从内部禁用包含,因为它之前已经包含,或者您想在包含之前使用自定义路径包含它。stb_image_write.htiny_gltf.htiny_gltf.h
    • TINYGLTF_USE_RAPIDJSON:使用 RapidJSON 作为 JSON 解析器/序列化器。RapidJSON 文件不包含在 TinyGLTF 存储库中。如果您启用此功能,请将包含路径设置为 RapidJSON。

    CMake 选项

    您可以使用功能添加 tinygltf。 如果您使用 将 tinygltf 添加到您的项目中,最好设置 on(只需为 tinygltf 添加一个包含路径)和 off(它不安装 tinygltf 文件)。add_subdirectoryadd_subdirectoryTINYGLTF_HEADER_ONLYTINYGLTF_INSTALL

    // Your project's CMakeLists.txt
    ...
    
    set(TINYGLTF_HEADER_ONLY ON CACHE INTERNAL "" FORCE)
    set(TINYGLTF_INSTALL OFF CACHE INTERNAL "" FORCE)
    add_subdirectory(/path/to/tinygltf)
    

    注意:使用 tinygltf 作为子模块不会自动将标头添加到您的包含路径中(作为许多库的标准)。要获得此功能,请从上面将以下内容添加到CMakeLists.txt文件中:

    target_include_directories(${PROJECT_NAME} PRIVATE "/path/to/tinygltf")
    

    保存 gltTF 2.0 模型

    • 缓冲区。
      • 归档
      • 嵌入式
      • 德拉科压缩了?
    • 图像
      • 归档
      • 嵌入式
    • 二进制(.glb)
      • .bin嵌入式单个 .glb
      • 外部.bin

    运行测试。

    glTF解析测试

    设置

    需要 Python。Git 克隆 https://github.com/KhronosGroup/glTF-Sample-Models 到本地目录。

    运行解析测试

    构建 、 编辑 之后,loader_exampletest_runner.py

    $ python test_runner.py

    单元测试

    $ cd tests
    $ make
    $ ./tester
    $ ./tester_noexcept

    模糊测试

    有关详细信息,请参阅。tests/fuzzer

    每周在 Ryzen9 3950X 上运行 Fuzzer 后,除了 Fuzzer 中的内存不足错误外,至少看起来很安全。 在解析 glTF 数据时,我们可能最好引入有限内存大小检查。LoadASCIIFromString

    第三方许可证

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

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 仅标头 C++11 小型 glTF 2.0 库

    常见问题FAQ

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