Я пытаюсь реализовать столкновение ткани с объектами, ткань представлена с использованием системы пружинных масс, она состоит из известного числа частиц, каждая частица имеет 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
}
}
}
но это легко, поскольку расстояние между центром шара и его поверхностью постоянно, в отличие от расстояния между центром куба и его поверхностью.
Все, что я знаю о кубе, это его центр и длина его края, как проецировать частицы ткани на поверхность куба?