libgdx:沿CATMullrom样条线计算相距相同的点?
我正在制作一个3D游戏,其中相机遵循一系列预定义的路径(从Blender中绘制的曲线导入) 在加载时,我提取混合器曲线点,并使用这些点使用类创建路径样条曲线 屏幕截图表明了我的意思(我将相机移到一边以查看路径-浅蓝色框表示相机路径上的固定点) 目前,我正在使用Blender定义导入的样条曲线中应包含多少点,这反过来决定了摄影机沿路径移动的速度(固定点)。这可以正常工作,但不同样条曲线之间存在不一致性(不同数量的控制点等) 我真正想要的是在每个“记号”中沿样条线移动固定距离的能力,以便整体相机移动更加一致 我更改了路径计算逻辑,将样条线长度考虑在内,然后使用“步长”计算样条线点 但是,样条曲线点之间的距离仍然不一致 我很确定我遗漏了一些明显的东西——有什么想法吗libgdx:沿CATMullrom样条线计算相距相同的点?,libgdx,catmull-rom-curve,Libgdx,Catmull Rom Curve,我正在制作一个3D游戏,其中相机遵循一系列预定义的路径(从Blender中绘制的曲线导入) 在加载时,我提取混合器曲线点,并使用这些点使用类创建路径样条曲线 屏幕截图表明了我的意思(我将相机移到一边以查看路径-浅蓝色框表示相机路径上的固定点) 目前,我正在使用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);
}
//复制第一个和最后一个控制点
//参考: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 WORKING CATMULL=新CatmullRomSpline(splineDataset,false);
//计算样条曲线长度
轨迹长度=工作曲线近似长度(数值样条曲线样本,用于长度计算);
每个路径的浮动距离=0.01f;
int numPathTicks=(int)(轨道长度/每条路径的距离);
对于(int i=0;i
请参阅的底部的“使精灵以恒定速度移动”:请参阅的底部的“使精灵以恒定速度移动”: