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

61 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 前言
- 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|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优化模型减少模型数量