61 lines
3.4 KiB
Markdown
61 lines
3.4 KiB
Markdown
# 前言
|
||
- https://github.com/assimp/assimp
|
||
- 知乎文章
|
||
- Assimp与模型渲染的故事:模型加载,骨骼蒙皮动画:https://zhuanlan.zhihu.com/p/559637598
|
||
- Assimp库的编译总结:https://zhuanlan.zhihu.com/p/533138560
|
||
- UE Assimp插件
|
||
- https://github.com/RianeDev/RuntimeStaticMeshImporter
|
||
-
|
||
|
||
# 数据结构
|
||
![[assimp_structure.png]]
|
||
|
||
|Struct|Content|
|
||
|---|---|
|
||
|aiScene|mRootNode,mMeshes,mMaterials,mAnimations,mTextures,mLights,mCameras|
|
||
|aiNode|mTransformation,mParent,mChildren,mMeshes(索引)|
|
||
|aiMesh|mVertices,mNormals,mTangents,mBitangents,mColors,mTextureCoords,mFaces,mBones,mAnimMeshes|
|
||
|aiFace|mIndices|
|
||
|aiMaterial|GetTextureCount(...),GetTexture(...)|
|
||
|aiAnimation|mDuration,mTicksPerSecond,mChannels,mMeshChannels|
|
||
|aiNodeAnim|mNodeName,mPositionKeys,mRotationKeys,mScalingKeys,mPostState|
|
||
## Model类
|
||
## Scene(场景)
|
||
- mRootNode:[根节点](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E6%A0%B9%E8%8A%82%E7%82%B9&zhida_source=entity),是整个场景图的起点,包含了其他所有[子节点](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E5%AD%90%E8%8A%82%E7%82%B9&zhida_source=entity)的引用。
|
||
- mMeshes[]:包含了场景中所有的网格(Mesh)数据的数组。
|
||
- mMaterials[]:包含了场景中所有材质的数组。
|
||
|
||
## Node(节点)
|
||
- Root Node:顶层的根节点,可以有多个子节点。
|
||
- Child Node:子节点,可以进一步包含更多的子节点和网格。
|
||
- mChildren[]:[子节点数组](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E5%AD%90%E8%8A%82%E7%82%B9%E6%95%B0%E7%BB%84&zhida_source=entity)。
|
||
- mMeshes[]:当前节点所含网格的数组。
|
||
- 每个节点都可能包含对其他子节点的引用和/或对一个或多个网格的引用。这构成了一个[树状结构](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E6%A0%91%E7%8A%B6%E7%BB%93%E6%9E%84&zhida_source=entity),用于表示3D模型的层次和组成。
|
||
## Mesh(网格)
|
||
- mVertices[]:存储网格顶点的数组。
|
||
- mNormals[]:存储顶点法线的数组,用于光照和渲染。
|
||
- mTextureCoords[]:存储[纹理坐标](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E7%BA%B9%E7%90%86%E5%9D%90%E6%A0%87&zhida_source=entity)的数组,用于将[纹理映射](https://zhida.zhihu.com/search?content_id=242521769&content_type=Article&match_order=1&q=%E7%BA%B9%E7%90%86%E6%98%A0%E5%B0%84&zhida_source=entity)到模型上。
|
||
- mFaces[]:存储面(由顶点构成)的数组。
|
||
- mMaterialIndex:材质索引,用于从场景中的材质数组mMaterials[]中引用对应的材质。
|
||
|
||
## Face(面)
|
||
- mIndices[]:存储构成面的顶点索引的数组。
|
||
|
||
# 载入文件
|
||
```c++
|
||
mScenePtr = mImporter.ReadFile(file,
|
||
aiProcess_Triangulate |
|
||
aiProcess_MakeLeftHanded |
|
||
aiProcess_CalcTangentSpace |
|
||
aiProcess_GenSmoothNormals |
|
||
aiProcess_OptimizeMeshes);
|
||
```
|
||
|
||
## 枚举说明
|
||
- aiProcess_Triangulate:非三角形几何图元,主动拆分成三角形。
|
||
- aiProcess_MakeLeftHanded:转换成左手坐标系,一般用于Direct3D渲染程序。
|
||
- aiProcess_CalcTangentSpace:
|
||
- aiProcess_GenSmoothNormals:生成平滑法线。
|
||
- aiProcess_OptimizeMeshes:优化模型,减少模型数量?
|
||
|