我正在尝试使我的模型在三次样条曲线中移动,因为我正在使用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样条曲线尝试了相同的代码,而我的模型却没有达到我的预期。
我发现以下代码适用于catmull样条曲线,但不适用于其他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函数?我想念什么?