ImplicitBackwardEulerSparse::DoTimestep的
总步骤:
1 通过当前的位移,计算出内力和刚度矩阵
2 用刚度矩阵和质量矩阵构造阻尼矩阵
3 用求解器解出qdelta,就是下一步的速度增量(为什么?求解器的矩阵在哪里更新?)
求解器实际上求解 tangentStiffnessMatrix * qdelta = bufferConstrained
于是关键在于知道 tangentStiffnessMatrix是什么
4 qvel[i] += qdelta[i],q[i] += q_1[i] - q[i] + timestep * qvel[i];
5 重新把约束了的变量的q qvel qacc(分别代表广义坐标、速度、加速度)设为0
当前问题:
什么是tangent stiffness matrix?各种矩阵的构造方法是什么?
隐式欧拉积分器的具体做法是什么?
内力的计算方法是什么?
计算出内力和刚度矩阵调用层次结构
ImplicitBackwardEulerSparse::DoTimestep
CorotationalLinearFEMForceModel::GetForceAndMatrix
(double * u, double * internalForces, SparseMatrix * tangentStiffnessMatrix)
CorotationalLinearFEM::ComputeForceAndStiffnessMatrix
(double * u, double * f, SparseMatrix * stiffnessMatrix, int warp)
为什么刚度矩阵需要实时生成?
CorotationalLinearFEM::ComputeForceAndStiffnessMatrixOfSubmesh
试图根据偏移u求出变形梯度F,再求出内力
其中
发现计算四面体变形梯度F的方法
此函数中
fElement存放四个顶点的f