libgdx:沿CatmullRomSpline计算相同距离的点?

时间:2015-08-16 10:45:10

标签: libgdx catmull-rom-curve

我正在构建一个3D游戏,其中摄像机遵循一系列预定义路径(从Blender中绘制的曲线导入)。

在加载时,我提取Blender曲线点并使用这些点来使用CatmullRomSpline类创建路径样条线。

Camera path

屏幕截图显示我的意思(我已将相机移到一边查看路径 - 浅蓝色方框表示沿着相机路径的固定点)。

目前,我正在使用Blender来定义我导入的样条曲线中应该有多少个点 - 这反过来决定了摄像机沿着路径移动的速度(固定点)。这样可以正常工作,但不同样条线之间存在不一致(控制点数量不同等)。

我真正想要的是能够在每个" tick"中沿着样条线移动一定距离,以便整体相机移动更加一致。

我已经改变了路径计算逻辑以考虑样条长度,然后使用“步长”'计算样条点。

但是,我仍然在样条点之间得到不一致的距离。

我相当肯定我错过了一些明显的东西 - 任何想法?

    //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);
    }

0 个答案:

没有答案