• 正文概述
  • GitHub – jessey-git/fx-gltf:一个 C++14/C++17 仅标头库,用于简单、高效和健壮地序列化 glTF 2.0

    存储库文件导航

    FX-GLTF

    一个 C++14/C++17 仅标头库,用于简单、高效和稳健的 glTF 2.0 序列化/反序列化

    构建状态 生成状态 GitHub 许可证 GitHub 发布

    特征

    • 完全支持所需的 glTF 2.0 模式元素

      • 完整的序列化(保存)和反序列化(加载)功能
      • 外部和嵌入式资源加载
      • 二进制 .glb 文件
      • 加载为文本,另存为二进制等。
    • 现代 C++14/C++17 支持

      • 包括在适当的性能情况下在内部使用 std::string_view
      • 使用现代且安全的语法和方法实现
    • 小型、仅标头库

      • <2000 行高级、简单、间距宽大的代码,包括空格/注释
      • C++20 模块就绪(不会泄漏预处理器定义/宏超出其自己的文件)
    • 快速、高效、安全的处理

    • 有用的例子

    使用和集成

    安装

    • gltf.h 是存储库路径中可用的单个必需文件。include/fx

      典型的安装将保留目录层次结构:#include <fx/gltf.h>

    依赖

    法典

    示例:一般用法

    // Single header...
    #include <fx/gltf.h>
    
    // Loading...
    fx::gltf::Document helmet = fx::gltf::LoadFromText("DamagedHelmet.gltf");
    
    // Manipulation...
    helmet.asset.generator = "My cool generator";
    helmet.buffers.push_back(fx::gltf::Buffer{});
    helmet.buffers.back().byteLength = 678;
    helmet.buffers.back().data = ...;
    helmet.buffers.back().SetAsEmbeddedResource();
    
    // Saving back as text...
    fx::gltf::Save(helment, "NewHelmet.gltf", false);

    示例:为文件和缓冲区的大小设置配额;例如,从潜在的敌对来源加载文件时

    #include <fx/gltf.h>
    
    // Load at most 3 buffers in total, each as large as 8mb...
    // additionally, place a quota on the file size as well
    fx::gltf::ReadQuotas readQuotas{};
    readQuotas.MaxBufferCount = 3;                     // default: 8
    readQuotas.MaxBufferByteLength = 8 * 1024 * 1024;  // default: 32mb
    readQuotas.MaxFileSize = 8 * 1024 * 1024;          // default: 32mb (applies to binary .glb only)
    
    fx::gltf::Document docFromInternet = fx::gltf::LoadFromBinary("untrusted.glb", readQuotas);

    应用集成

    请参阅启用 DirectX 12 的查看器示例,了解如何在完整的应用程序上下文中利用。fx-gltf

    安全性和坚固性

    • 强大的自动化测试

      • glTF-Sample-Models 中所有模型的往返测试
      • 测试 Base64 编码和解码例程,包括无效的 Base64 输入
      • 严格的必需元素加载和保存与可选元素
    型号类型 状态:glTF-Sample-Models
    .gltf 文件,带外部资源 100% 完成并通过
    .gltf 文件,包含嵌入资源 100% 完成并通过(2 个模型因不合格 mimetype 而被排除在外)
    带有 Draco 扩展名的 .gltf 文件 100% 完成并通过
    .glb 文件 100% 完成并通过
    • 安全

      • 从恶意文件加载外部资源 URI 时针对目录遍历的内置保护
      • 对最大文件大小和缓冲区强制执行配额,以防止恶意文件的 DOS
    • 使用 clang-tidy 和 MSVC CppCoreCheck 工具集开发

    性能

    • 比其他全功能装载机更快

      • 根据型号的不同,改进速度从 1.1 倍到 2 倍 (!) 不等。
    -------------------------------------------------------------------------------------
    Benchmark                                               Time           CPU Iterations
    -------------------------------------------------------------------------------------
    fxgltf_Test/External_Box_mean                         261 us        261 us       2358
    fxgltf_Test/External_Box_median                       253 us        258 us       2358
    fxgltf_Test/External_Box_stddev                        27 us         28 us       2358
    tinygltf_Test/External_Box_mean                       321 us        319 us       2133
    tinygltf_Test/External_Box_median                     312 us        308 us       2133
    tinygltf_Test/External_Box_stddev                      20 us         20 us       2133
    
    fxgltf_Test/Embedded_Box_mean                         192 us        192 us       4073
    fxgltf_Test/Embedded_Box_median                       192 us        188 us       4073
    fxgltf_Test/Embedded_Box_stddev                        14 us         16 us       4073
    tinygltf_Test/Embedded_Box_mean                       274 us        273 us       3200
    tinygltf_Test/Embedded_Box_median                     281 us        278 us       3200
    tinygltf_Test/Embedded_Box_stddev                      30 us         30 us       3200
    
    fxgltf_Test/External_2CylinderEngine_mean            6503 us       6563 us        100
    fxgltf_Test/External_2CylinderEngine_median          7065 us       7188 us        100
    fxgltf_Test/External_2CylinderEngine_stddev           900 us        931 us        100
    tinygltf_Test/External_2CylinderEngine_mean          8664 us       8681 us         90
    tinygltf_Test/External_2CylinderEngine_median        8490 us       8507 us         90
    tinygltf_Test/External_2CylinderEngine_stddev        1034 us       1005 us         90
    
    fxgltf_Test/Embedded_2CylinderEngine_mean           72760 us      72727 us         11
    fxgltf_Test/Embedded_2CylinderEngine_median         74147 us      73864 us         11
    fxgltf_Test/Embedded_2CylinderEngine_stddev          8219 us       8246 us         11
    tinygltf_Test/Embedded_2CylinderEngine_mean        110179 us     110268 us          7
    tinygltf_Test/Embedded_2CylinderEngine_median      109267 us     109375 us          7
    tinygltf_Test/Embedded_2CylinderEngine_stddev        5324 us       6431 us          7
    
    fxgltf_Test/External_ReciprocatingSaw_mean          12221 us      12333 us         56
    fxgltf_Test/External_ReciprocatingSaw_median        11875 us      11998 us         56
    fxgltf_Test/External_ReciprocatingSaw_stddev          717 us        666 us         56
    tinygltf_Test/External_ReciprocatingSaw_mean        17273 us      17313 us         50
    tinygltf_Test/External_ReciprocatingSaw_median      18154 us      18125 us         50
    tinygltf_Test/External_ReciprocatingSaw_stddev       2095 us       2205 us         50
    
    fxgltf_Test/Embedded_ReciprocatingSaw_mean         143724 us     144792 us          6
    fxgltf_Test/Embedded_ReciprocatingSaw_median       147001 us     148438 us          6
    fxgltf_Test/Embedded_ReciprocatingSaw_stddev        14070 us      14096 us          6
    tinygltf_Test/Embedded_ReciprocatingSaw_mean       211632 us     210417 us          3
    tinygltf_Test/Embedded_ReciprocatingSaw_median     206052 us     208333 us          3
    tinygltf_Test/Embedded_ReciprocatingSaw_stddev      20525 us      21663 us          3
    
    • 比其他功能齐全的加载器更节省内存

      • 各种型号的分配数量减少了 50% 以上。有时高达70%!

      • 各种型号的总分配大小减少了 40% 以上。有时高达 67%!

    ----------------------------------------------------------------------------------------------------------
    Benchmark                                        Time           CPU Iterations TotalNewCalls TotalNewSize
    ----------------------------------------------------------------------------------------------------------
    fxgltf_Test/External_Box                       222 us          0 us          1        201    12.646k
    tinygltf_Test/External_Box                     664 us          0 us          1        428    36.709k
    
    fxgltf_Test/Embedded_Box                       660 us          0 us          1        217    19.958k
    tinygltf_Test/Embedded_Box                     670 us          0 us          1        452    49.667k
    
    fxgltf_Test/External_2CylinderEngine         11398 us          0 us          1     4.915k   2.15445M
    tinygltf_Test/External_2CylinderEngine       11598 us      15625 us          1    14.942k    5.1615M
    
    fxgltf_Test/Embedded_2CylinderEngine         57782 us      62500 us          1     4.968k   23.0764M
    tinygltf_Test/Embedded_2CylinderEngine       80368 us      78125 us          1    15.021k   43.5535M
    
    fxgltf_Test/External_ReciprocatingSaw        17415 us      15625 us          1     9.784k    4.2078M
    tinygltf_Test/External_ReciprocatingSaw      13825 us      15625 us          1    31.806k   10.5618M
    
    fxgltf_Test/Embedded_ReciprocatingSaw       126205 us     125000 us          1      9.84k   42.5873M
    tinygltf_Test/Embedded_ReciprocatingSaw     236703 us     234375 us          1    31.889k   79.4386M
    
    • 与 C++14 相比,使用 C++17 会产生一些额外的好处

      • 外部资源的分配总数下降了 2-3%,总分配大小下降了 1%,嵌入式资源的分配大小下降了 5-10%!

    C++14

    --------------------------------------------------------------------------------------------------------
    Benchmark                                      Time           CPU Iterations TotalNewCalls TotalNewSize
    --------------------------------------------------------------------------------------------------------
    fxgltf_Test/External_Box                     648 us          0 us          1        206    12.806k
    fxgltf_Test/Embedded_Box                     608 us          0 us          1        223        21k
    fxgltf_Test/External_2CylinderEngine       11017 us      15625 us          1     5.052k   2.15883M
    fxgltf_Test/Embedded_2CylinderEngine       54864 us      62500 us          1     5.106k   25.4737M
    fxgltf_Test/External_ReciprocatingSaw      10434 us          0 us          1    10.045k   4.21615M
    fxgltf_Test/Embedded_ReciprocatingSaw     106756 us     109375 us          1    10.102k    47.258M
    

    C++17

    --------------------------------------------------------------------------------------------------------
    Benchmark                                      Time           CPU Iterations TotalNewCalls TotalNewSize
    --------------------------------------------------------------------------------------------------------
    fxgltf_Test/External_Box                     236 us          0 us          1        201    12.646k
    fxgltf_Test/Embedded_Box                     193 us          0 us          1        217    19.958k
    fxgltf_Test/External_2CylinderEngine        6076 us      15625 us          1     4.915k   2.15445M
    fxgltf_Test/Embedded_2CylinderEngine       63823 us      78125 us          1     4.968k   23.0764M
    fxgltf_Test/External_ReciprocatingSaw      17033 us      15625 us          1     9.784k    4.2078M
    fxgltf_Test/Embedded_ReciprocatingSaw     122586 us     109375 us          1      9.84k   42.5873M
    

    执行单元测试

    视觉工作室

    • 文件->打开->CMake
      • 指向存储库路径test
    • CMake->全部重建
    • 在测试资源管理器中 -> 运行全部

    命令行

    $ mkdir build
    $ cd build
    $ cmake ..
    $ cmake --build .
    $ ctest --output-on-failure -C [Debug or Release]

    支持的编译器

    • Microsoft Visual C++ 2017 15.3+(可能更早版本)
    • 铿锵 5.0+
    • 海湾合作委员会 6.1+

    已知问题和待办事项

    glTF 2.0 支持

    • 没有已知问题或缺少功能

    应用程序接口

    • 没有已知问题

    包装

    • TODO:发布到 vcpkg,以便在 MSVC 环境中更轻松地进行包维护
    • TODO:除了标头之外,还提供 C++20 模块文件

    一般(未来)

    • API:改进:在手动构建文档时更容易创建对象(C++20 将允许聚合结构初始化,所以也许这就是所需要的……

    许可证

    根据 MIT 许可 http://opensource.org/licenses/MIT 获得许可。

    版权所有 (c) 2018-2022 Jesse Yurkovich

    特此免费授予任何获得副本的人的许可 本软件和相关文档文件(“软件”),以处理 在软件中不受限制,包括但不限于权利 使用、复制、修改、合并、发布、分发、再许可和/或出售 软件的副本,并允许软件接收者 提供这样做,但须符合以下条件:

    上述版权声明和本许可声明应包含在所有 本软件的副本或大部分。

    本软件按“原样”提供,不提供任何形式的明示或 暗示,包括但不限于适销性保证, 适用于特定目的且不侵权。在任何情况下,都不得 作者或版权所有者对任何索赔、损害或其他责任 责任,无论是在合同诉讼、侵权行为还是其他诉讼中,因以下原因而产生: 与本软件或本软件中的使用或其他交易有关。 软件。

    使用的第三方工具

    如果没有这些重要资源的帮助,这个软件是不可能实现的。 多谢!

    大约

    一个 C++14/C++17 仅标头库,用于简单、高效和稳健的 glTF 2.0 序列化/反序列化

    主题

    资源

    许可证

    星星

    观察家

    释放11

    稳定版本 v2.0.0最近的
    on Jan 2, 2022

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

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 一个 C++14/C++17 仅标头库,用于简单、高效和稳健的 glTF 2.0 序列化/反序列化

    常见问题FAQ

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