我正在构建一个 3D 游戏,其中相机遵循一系列预定义的路径(从 Blender 中绘制的曲线导入)。
在加载时,我提取 Blender 曲线点,并使用这些点创建使用CatmullRomSpline类的路径样条线。
屏幕截图表明了我的意思(我已将相机移到一边以查看路径 - 浅蓝色框代表相机路径上的固定点)。
目前,我正在使用 Blender 来定义导入的样条曲线中应该有多少点 - 这反过来又决定了相机沿路径移动的速度(固定点)。这工作正常,但不同样条曲线(不同数量的控制点等)之间存在不一致。
我真正想要的是能够在每个“滴答”中沿着样条线移动一些固定距离,以便整体相机移动更加一致。
我更改了路径计算逻辑以考虑样条长度,然后使用“步长”来计算样条点。
但是,样条点之间的距离仍然不一致。
我很确定我遗漏了一些明显的东西——有什么想法吗?
//duplicate first and last control points
//ref: http://stackoverflow.com/questions/29198881/drawing-a-catmullromspline-in-libgdx-with-an-endpoint-and-startpoint
splineDataset[0] = splineDataset[1].cpy();
splineDataset[splineDataset.length - 1] = splineDataset[splineDataset.length - 2].cpy();
CatmullRomSpline<Vector3> workingCatMull = new CatmullRomSpline<Vector3>(splineDataset, false);
//calculate spline length
trackLength = workingCatMull.approxLength(NUM_SPLINE_SAMPLES_FOR_LENGTH_CALC);
float DISTANCE_PER_PATH_TICK = 0.01f;
int numPathTicks = (int)(trackLength / DISTANCE_PER_PATH_TICK);
for(int i = 0; i < numPathTicks; ++i)
{
//calculate spline point
Vector3 workingVector = new Vector3();
float splinePercentage = ((float)i) / ((float)numPathTicks-1);
workingCatMull.valueAt(workingVector, splinePercentage);
//offset path point by specified value
workingVector.add(positionOffset);
//add spline point to camera path
listOfPathPoints.add(workingVector);
}