3d - gltf 3D 模型的位置、法线、texcoords 和其他此类属性是否总是在同一个缓冲区中找到?
问题描述
我最近开始研究 gltf 文件,如果这个问题看起来很愚蠢,请原谅我。如果在同一个缓冲区中找到位置 texcoords 等,我可以毫无问题地解析文件并在我制作的 c++ 程序中显示模型。但是如果它们可以存储在不同的缓冲区中,那么我的代码逻辑将不起作用。我一直在查看一些存储在 gltf 文件中的 3d 模型样本,这个想法让我印象深刻,但我找不到任何将这些属性存储在不同缓冲区中的文件,所以我想也许它们不能存储在不同的缓冲区中。
解决方案
在 glTF 术语中,Buffer 是存储或传输的单元,可以是外部.bin
文件或嵌入 GLB。缓冲区包含文件中的所有二进制数据——包括动画关键帧,您可能不想上传到 GPU。
每个缓冲区将包含一个或多个“缓冲区视图”,这些是上传到 GPU 的适当结构。包含顶点属性的缓冲区视图保证不包含其他类型的数据。但是单个网格的顶点属性可能会拆分为多个缓冲区视图。有几个原因,比如压缩,这可能是正确的选择。请参阅:缓冲区和缓冲区视图。
如果您需要保证您的 glTF 文件遵循特定的顶点缓冲区布局,我建议您使用gltfpack或gltf-transform等工具对文件进行预处理。
推荐阅读
- database - PG Bouncer 无法处理 1000 个并发请求
- fortran - 用户定义类型作为基本子程序的参数?
- azure - 使用应用服务证书的 Azure ARM SSL 绑定
- arduino - 如何解决 arduino UNO 中的退出状态 1 错误?
- linux - 如何编辑 watchdog.conf 文件以启用看门狗
- java - 外部图形相对路径
- laravel - Api auth 中间件不在服务上工作,而是在本地工作
- angular - 如何在 Angular 6 中包含外部 html 文件和 js 文件?
- android - 404 oAuth 令牌 API
- html - 优化一个简单的类