|
Tempestglen 发表于 2013-10-31 17:17
bullet与ODE的横向pk性能,与 本议题无关。
例如,
ODE不利用prefetch时的性能指数为1,利用好之后性能 ...
struct Link : Feature
{
Node* m_n[2]; // Node pointers
btScalar m_rl; // Rest length
int m_bbending:1; // Bending link
btScalar m_c0; // (ima+imb)*kLST
btScalar m_c1; // rl^2
btScalar m_c2; // |gradient|^2/c0
btVector3 m_c3; // gradient
};
void btSoftBody::PSolve_Links(btSoftBody* psb,btScalar kst,btScalar ti)
{
for(int i=0,ni=psb->m_links.size();i<ni;++i)
{
Link& l=psb->m_links;
if(l.m_c0>0)
{
Node& a=*l.m_n[0];
Node& b=*l.m_n[1];
const btVector3 del=b.m_x-a.m_x;
const btScalar len=del.length2();
const btScalar k=((l.m_c1-len)/(l.m_c0*(l.m_c1+len)))*kst;
const btScalar t=k*a.m_im;
a.m_x-=del*(k*a.m_im);
b.m_x+=del*(k*b.m_im);
}
}
}
bulllet的这个函数,这个显然是后端计算,link就是碰撞检测以后的碰撞点,这个函数是引用到物理响应。
m_links内部不是已经连续化了吗,不连续化的是link的node*,node*是表示检测到碰到的物体指针,这个还是老问题,前端碰撞检测你怎么给我连续化。 |
|