2021SC@SDUSC
目录
分析概括
模块功能
此模块主要用于网格蒙皮的生成以及几何体发生变换后网格蒙皮的更新,在进行位置变换后部分网格发生了数量和位置的变换,而skinnedmeshcreator的功能就在于适配这种变换使任何情况下都形成合适的蒙皮网络
网格蒙皮详解
网格是蒙皮和自由变形的基础,蒙皮的本质也就是让骨骼控制网格上的点。 如果一个点受 N 个骨骼影响,那么这些根骨骼将按百分比,分配谁控制的多,谁控制的少(权重)。在蒙皮的过程中,主要的工作就是让权重值分配的合理。蒙皮的详细过程为:
创建好骨骼和网格点
添加影响骨骼
调整权重。设置权重值:选中指定的点,再指定好它受哪个骨骼影响,然后调值
关键代码分析
SkinnedMeshCreator.h分析
class SkinnedMeshCreator
{
public:
SkinnedMeshCreator(const Object &object,
const std::map<int, RigVertexWeights> &resultWeights);//构造函数
Model *createMeshFromTransform(const std::vector<QMatrix4x4> &matricies);//在变换中创建网格
private:
Object m_object;
std::map<int, RigVertexWeights> m_resultWeights;
std::vector<std::vector<int>> m_verticesOldIndices;//旧索引顶点