任务:
研究reducedDynamicSolver-rt,了解降维后的积分方法
代码结构:
函数initScene()准备必要的资源,按顺序为:
调用了ReadMatrixFromDisk_()从磁盘读取低维基向量,放入ModalMatrix 对象renderingModalMatrix之中,这个类可以由高维力算出低维力。同时分配低维坐标q 低维力 fq fqBase。其中fqBase表示在参考动作(参考动作不一定是未变形动作)的情形下的低维力,模拟实际的力是在这个力的基础上加上用户施加的力fq。
用模态矩阵和网格初始化SceneObjectReducedCPU对象deformableObjectRenderingMeshCPU,并赋给基类指针deformableObjectRenderingMeshReduced。SceneObjectReducedCPU可以即时指定的新的低维坐标,并换算成高维坐标(顶点的位移)。
用多项式系数初始化 StVKReducedInternalForces(cubicPolynomialFilename)对象stVKReducedInternalForces,此类既可以用已经计算好的stvk多项式系数初始化,也可以即时计算系数
这个类可以用给定的低维坐标,计算出低维力
用 StVKReducedInternalForces 初始化 StVKReducedStiffnessMatrix,这个矩阵可以通过给定的低维坐标,构造出对应位置的tangent stiffness matrix
用前述计算低维力和低维切向刚度矩阵的两个类构造ReducedStVKForceModel对象
用以上数据初始化ImplicitNewmarkDense积分器
函数idleFunction()迭代求解
给积分器设置当前的外力fq,fq= 参考动作鼠标拖动的外力 + 当前鼠标拖动的外力
调用积分器的DoTimeStep函数进行数值积分
获得积分器计算出的低维坐标q,赋值给SceneObjectReducedCPU,并调用其Compute_uUq函数计算出高维坐标(顶点偏移)
更新显示