GitHub – jessey-git/fx-gltf:一个 C++14/C++17 仅标头库,用于简单、高效和健壮地序列化 glTF 2.0
| Name | ||
|---|---|---|
|
7766C23 · 4 years ago
|
||
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
6 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
7 years ago
|
|
|
|
7 years ago
|
|
|
|
6 years ago
|
|
|
|
4 years ago
|
|
|
|
5 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
存储库文件导航
一个 C++14/C++17 仅标头库,用于简单、高效和稳健的 glTF 2.0 序列化/反序列化
-
完全支持所需的 glTF 2.0 模式元素
- 完整的序列化(保存)和反序列化(加载)功能
- 外部和嵌入式资源加载
- 二进制 .glb 文件
- 加载为文本,另存为二进制等。
-
现代 C++14/C++17 支持
- 包括在适当的性能情况下在内部使用 std::string_view
- 使用现代且安全的语法和方法实现
-
小型、仅标头库
- <2000 行高级、简单、间距宽大的代码,包括空格/注释
- C++20 模块就绪(不会泄漏预处理器定义/宏超出其自己的文件)
-
快速、高效、安全的处理
-
有用的例子
- 支持 DirectX 12 的查看器
-
gltf.h是存储库路径中可用的单个必需文件。include/fx典型的安装将保留目录层次结构:
#include <fx/gltf.h>
- nlohmann::json(必须使用
#include <nlohmann/json.hpp>)
示例:一般用法
// 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+
- 没有已知问题或缺少功能
- 没有已知问题
- TODO:发布到 vcpkg,以便在 MSVC 环境中更轻松地进行包维护
- TODO:除了标头之外,还提供 C++20 模块文件
根据 MIT 许可 http://opensource.org/licenses/MIT 获得许可。
版权所有 (c) 2018-2022 Jesse Yurkovich
特此免费授予任何获得副本的人的许可 本软件和相关文档文件(“软件”),以处理 在软件中不受限制,包括但不限于权利 使用、复制、修改、合并、发布、分发、再许可和/或出售 软件的副本,并允许软件接收者 提供这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在所有 本软件的副本或大部分。
本软件按“原样”提供,不提供任何形式的明示或 暗示,包括但不限于适销性保证, 适用于特定目的且不侵权。在任何情况下,都不得 作者或版权所有者对任何索赔、损害或其他责任 责任,无论是在合同诉讼、侵权行为还是其他诉讼中,因以下原因而产生: 与本软件或本软件中的使用或其他交易有关。 软件。
如果没有这些重要资源的帮助,这个软件是不可能实现的。 多谢!
- nlohmann::json 用于 JSON 序列化
- 用于测试的 Catch2
- glTF-Sample-Models 用于 glTF 示例模型。所有 1.2GB …
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 一个 C++14/C++17 仅标头库,用于简单、高效和稳健的 glTF 2.0 序列化/反序列化
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办
