Как использовать GLM :: splines в приложениях OpenGL? - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь заставить мою модель двигаться по кривой кубического сплайна, для этого я использую библиотеку glm и this в качестве ссылки для получения точек на кривой.

Вот как я его использую:

glm::vec3 cubic_spline(const std::vector<glm::vec3>& cp, float t)
    return glm::cubic(cp[0], cp[1], cp[2], cp[3], t);

Я вызываю эту функцию с t = 0 до 1, используя 0.01 в качестве шага.Я понятия не имею, почему это не работает, я пробовал тот же код для других сплайнов glm, и моя модель работает не так, как я ожидал.

Я обнаружил, что следующий код работает для сплайнов кошек, но это делаетне для других сплайнов glm, здесь t идет от 0 до cp.size:

glm::vec3 catmull_rom_spline(const std::vector<glm::vec3>& cp, float t)
{
    // indices of the relevant control points
    int i0 = (int)glm::clamp(t - 1, 0.0f, (float)cp.size() - 1);
    int i1 = (int)glm::clamp(t, 0.0f, (float)cp.size() - 1);
    int i2 = (int)glm::clamp(t + 1, 0.0f, (float)cp.size() - 1);
    int i3 = (int)glm::clamp(t + 2, 0.0f, (float)cp.size() - 1);

    // parameter on the local curve interval
    float local_t = glm::fract(t);

    return glm::catmullRom(cp[i0], cp[i1], cp[i2], cp[i3], local_t);
}

Как должны использоваться функции glm :: splines?Чего мне не хватает?

...