我试图与物体进行布料碰撞,布料使用弹簧质量系统表示,它由已知数量的颗粒组成,每个颗粒都有一个vec3作为其位置,布料应采取与其碰撞的物体的形状,到目前为止,我能够使用此功能将布料投射到球的表面:
void ballCollision(const Vec3 center, const float radius)
{
std::vector<Particle>::iterator particle;
for (particle = particles.begin(); particle != particles.end(); particle++)
{
Vec3 v = (*particle).getPos() - center;
float l = v.length();
if (v.length() < radius) // if the particle is inside the ball
{
// offset position simply adds a vec3 to the particles position
(*particle).offsetPos(v.normalized()*(radius - l)); // project the particle to the surface of the ball
}
}
}
但这很容易,因为球的中心与其表面之间的距离是恒定的,不像立方体的中心与其表面之间的距离。
我所知道的立方体是它的中心和边缘的长度,我如何将布料的颗粒投射到立方体的表面?
答案 0 :(得分:0)
立方体是6个平面,每个平面都有约束。您可以使用从点到平面的Ray交点。
使用角落里的Ray步骤迭代飞机。