之前在看LearnOpenGL的这一节,主要讲的就是使用assimp来加载模型,但是给的参考代码只针对了模型有材质贴图的情况,也就是通过去获取diffuse贴图以及specular贴图的方式获得模型的材质。 比如这是官方给的示例的文件,其中包含了很多的材质贴图: 在相关的mtl文件里也链接到了具体的贴图文件: 但是我们在使用blender等很多软...
2. 对于assimp中的fbx文件解析,仔细查阅文档,了解其对金属度、粗糙度、高光参数的处理方式,避免因规则差异导致参数丢失或错误。3. 若在UE中,发现fbx模型材质属性与预期不符,检查UE材质编辑器设置,确保其正确识别并应用导入的材质参数。4. 对于特定的金属度、粗糙度、高光参数,可以尝试修改assimp代码...
Mesh网格,一个Mesh网格是可以看做渲染的一个单位,它包含了顶点数据,法线,纹理坐标(只是坐标数据,不是纹理对象),面等数组,以及材质索引(指向Scene中的mMaterials) Face面,面数组由面组成(废话),概念上,一个面表示的是物体的渲染图元(primitive)(三角形,方形,点)。在这里,我们则让它包含了组成图元的顶点索引(也...
mMaterials[]:包含了场景中所有材质的数组。 Node(节点): Root Node:顶层的根节点,可以有多个子节点。 Child Node:子节点,可以进一步包含更多的子节点和网格。 mChildren[]:子节点数组。 mMeshes[]:当前节点所含网格的数组。 每个节点都可能包含对其他子节点的引用和/或对一个或多个网格的引用。这构成了一个...
读取材质时,利用aiMaterial中保存的材质信息,包括纹理贴图。通过纹理类型(如aiTextureType_DIFFUSE)获取对应纹理路径,确保不会重复加载相同贴图。此外,使用类似方法创建唯一的Material,用于区分不同材质的Mesh。在模型数据获取后,提取所有Mesh的顶点和索引,为后续绘制准备。SkinnedModel类扩展了Model类,以...
aiScene对象中的一个 mesh 结构相对应。这个结构体包含顶点缓存、索引缓存和材质的索引。目前一个材质只是一个纹理,又因为 mesh 实体可以共享材质,所以我们给每个材质( m_Textures )单独设一个向量。MeshEntry::MaterialIndex 指向 m_Textures 里面的一个纹理。
所有的模型、场景数据都包含在Scene对象中,如所有的材质和Mesh。同样,场景的根节点引用也包含在这个scene对象中。 场景的根节点(Root node)可能也会包含很多子节点和一个指向保存模型点云数据mMeshes[]的索引集合。根节点上的mMeshes[]里保存了实际了Mesh对象,而每个子节点上的mMesshes[]都只是指向根节点中的mMes...
我们先计算在 aiScene 结构体中的顶点和索引的数量,而且对于每一个 aiMesh 结构体我们都会将其材质索引、索引数量、base vertex 和 base index 保存在 m_Entries 数组中。并根据这些为向量分配空间,之后我们 遍历 aiScene 中每个 aiMesh 结构体来进行初始化这些向量,这些向量都通过引用传递到 InitMesh() 函数中,材...
3. 遍历模型数据:一旦成功加载模型文件,你可以通过访问`scene`对象来遍历和获取模型的各个部分,如顶点数据、纹理信息、材质属性等。 在处理节点时,你可以获取节点的变换矩阵、网格数据、材质索引等信息,并根据需要进行进一步处理和渲染。 4. 释放资源:在使用完Assimp库后,记得及时释放相关资源,以避免内存泄漏。 以上是...