[{"data":1,"prerenderedAt":126},["ShallowReactive",2],{"page-\u002Fcpp\u002Fopengel\u002F资产和模型加载":3},{"id":4,"title":5,"body":6,"description":118,"extension":119,"meta":120,"navigation":121,"path":122,"seo":123,"stem":124,"__hash__":125},"content\u002Fcpp\u002Fopengel\u002F资产和模型加载.md","资产和模型加载",{"type":7,"value":8,"toc":114},"minimark",[9,34,41,48],[10,11,12,13,20,21,25,26,29,30,33],"p",{},"一个非常流行的模型导入库是",[14,15,19],"a",{"href":16,"rel":17},"http:\u002F\u002Fassimp.org\u002F",[18],"nofollow","Assimp","，它是",[22,23,24],"strong",{},"Open Asset Import Library","（开放的资产导入库）的缩写。Assimp能够导入很多种不同的模型文件格式（并也能够导出部分的格式），它会",[22,27,28],{},"将所有的模型数据加载至Assimp的通用数据结构中","。当Assimp加载完模型之后，我们就能够从Assimp的数据结构中提取我们所需的所有数据了。由于Assimp的数据结构保持不变，",[22,31,32],{},"不论导入的是什么种类的文件格式，它都能够将我们从这些不同的文件格式中抽象出来","，用同一种方式访问我们需要的数据。",[10,35,36,37,40],{},"当使用Assimp导入一个模型的时候，它通常会将整个模型加载进一个",[22,38,39],{},"场景","(Scene)对象，它会包含导入的模型\u002F场景中的所有数据。Assimp会将场景载入为一系列的节点(Node)，每个节点包含了场景对象中所储存数据的索引，每个节点都可以有任意数量的子节点。Assimp数据结构的（简化）模型如下：",[10,42,43],{},[44,45],"img",{"alt":46,"src":47},"image-20251029210710323",".\u002Fassets\u002Fimage-20251029210710323.png",[49,50,51,63,74,88,103],"ul",{},[52,53,54,55,58,59,62],"li",{},"和材质和网格(Mesh)一样，所有的",[22,56,57],{},"场景\u002F模型数据都包含在Scene对象中","。Scene对象也",[22,60,61],{},"包含了场景根节点的引用","。",[52,64,65,66,69,70,73],{},"场景的Root node（根节点）",[22,67,68],{},"可能包含子节点（和其它的节点一样）","，它会有一系列指向场景对象中mMeshes数组中储存的网格数据的索引。",[22,71,72],{},"Scene下的mMeshes数组储存了真正的Mesh对象","，节点中的mMeshes数组保存的只是场景中网格数组的索引。",[52,75,76,77,80,81,84,85,62],{},"一个",[22,78,79],{},"Mesh对象本身包含了渲染所需要的所有相关数据","，像是",[22,82,83],{},"顶点位置、法向量、纹理坐标","、",[22,86,87],{},"面(Face)和物体的材质",[52,89,76,90,93,94,97,98,102],{},[22,91,92],{},"网格包含了多个面","。Face代表的是",[22,95,96],{},"物体的渲染图元(Primitive)（三角形、方形、点）","。一个面包含了组成图元的顶点的索引。由于顶点和索引是分开的，使用一个索引缓冲来渲染是非常简单的（见[你好，三角形](",[14,99,100],{"href":100,"rel":101},"https:\u002F\u002Flearnopengl-cn.github.io\u002F01",[18]," Getting started\u002F04 Hello Triangle\u002F)）。",[52,104,105,106,109,110,113],{},"最后，",[22,107,108],{},"一个网格也包含了一个Material对象，它包含了一些函数能让我们获取物体的材质属性","，比如说",[22,111,112],{},"颜色和纹理贴图","（比如漫反射和镜面光贴图）。",{"title":115,"searchDepth":116,"depth":116,"links":117},"",2,[],"一个非常流行的模型导入库是Assimp，它是Open Asset Import Library（开放的资产导入库）的缩写。Assimp能够导入很多种不同的模型文件格式（并也能够导出部分的格式），它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后，我们就能够从Assimp的数据结构中提取我们所需的所有数据了。由于Assimp的数据结构保持不变，不论导入的是什么种类的文件格式，它都能够将我们从这些不同的文件格式中抽象出来，用同一种方式访问我们需要的数据。","md",{},true,"\u002Fcpp\u002Fopengel\u002F资产和模型加载",{"description":118},"cpp\u002Fopengel\u002F资产和模型加载","xamzbKgzKi2K9Z_LoAaHXGjDFnWBYaIhEcbVhl91fwI",1791042464077]