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