Спроецировать частицу на поверхность куба - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь реализовать столкновение ткани с объектами, ткань представлена ​​с использованием системы пружинных масс, она состоит из известного числа частиц, каждая частица имеет 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 голосов
/ 13 мая 2018

Куб - это 6 плоскостей с ограничениями для каждой плоскости. Вы можете использовать пересечение Лучей от точки к плоскости.

Итерация по плоскостям с лучами из углов.

...