将粒子投影到立方体的表面

时间:2018-05-12 21:59:38

标签: c++ opengl glut

我试图与物体进行布料碰撞,布料使用弹簧质量系统表示,它由已知数量的颗粒组成,每个颗粒都有一个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
        }
    }
}

但这很容易,因为球的中心与其表面之间的距离是恒定的,不像立方体的中心与其表面之间的距离。

我所知道的立方体是它的中心和边缘的长度,我如何将布料的颗粒投射到立方体的表面?

1 个答案:

答案 0 :(得分:0)

立方体是6个平面,每个平面都有约束。您可以使用从点到平面的Ray交点。

使用角落里的Ray步骤迭代飞机。