BlueRoseNote/04-ComputerGraphics/Assimp/Assimp使用笔记.md

58 lines
3.4 KiB
Markdown
Raw Normal View History

2024-11-05 17:28:43 +08:00
# 前言
- https://github.com/assimp/assimp
- 知乎文章
- Assimp与模型渲染的故事模型加载骨骼蒙皮动画:https://zhuanlan.zhihu.com/p/559637598
- Assimp库的编译总结:https://zhuanlan.zhihu.com/p/533138560
# 数据结构
![[assimp_structure.png]]
|Struct|Content|
|---|---|
|aiScene|mRootNodemMeshesmMaterialsmAnimationsmTexturesmLightsmCameras|
|aiNode|mTransformationmParentmChildrenmMeshes(索引)|
|aiMesh|mVerticesmNormalsmTangentsmBitangentsmColorsmTextureCoordsmFacesmBonesmAnimMeshes|
|aiFace|mIndices|
|aiMaterial|GetTextureCount(...)GetTexture(...)|
|aiAnimation|mDurationmTicksPerSecondmChannelsmMeshChannels|
|aiNodeAnim|mNodeNamemPositionKeysmRotationKeysmScalingKeysmPostState|
## 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优化模型减少模型数量