如何使几何跟随曲线?

时间:2016-11-25 16:30:50

标签: swift scenekit curve bezier

是否可以制作一些精灵/物体来复制自己并弯曲成曲线? 我做了一个图像来表明我的意思:

road

此处曲线,可能是贝塞尔曲线路径为绿色,几何体显示为黑色。我希望精灵或对象(在左侧)复制自身并将其顶点与最后一个副本合并,而最后两个顶点跟随曲线。 如果是的话,该怎么做?有关于这样的事情的文件吗?你做过这样的事吗?怎么样?

编辑:我不希望精灵或对象在路径中移动,但有点复制本身并将其自身与其副本合并。

2 个答案:

答案 0 :(得分:2)

是的,您想要做的事情可以奏效,而您的绘图则展示了它的运作方式。伪代码看起来像这样:

curveLength = <length of entire curve>;
tileLength = <length of 1 tile>;
currentLength = 0;
while (currentLength < curveLength)
{
    currentTileLength = 0;
    startPt = prevPt = calculateBezierAt(0.0);
    for (t = delta; (t < 1) && (currentTileLength < tileLength); t += delta) // delta is up to you. I often use 1/100th
    {
        nextPt = calculateBezierAt(t);
        distance = distanceBetween(prevPt, nextPt);
        currentTileLength += distance;
        currentLength += distance;
        prevPt = nextPt;
    }
    endPt = prevPt;
    // Calculate quad here
}

要计算每个四边形,您需要在起点和终点生成垂线。然后你的四边形有4个点。

请注意,我假设只有一个bezier,我简化了一些事情。通常情况下,你会将它们中的许多连接在一起,所以迭代它们比我上面说的要复杂一点,但它不应该太难。

另请注意,如果您的角落非常紧,或者曲线自行回转,您可能会看到看起来很糟糕的结果。如果你自己生成曲线,可能你会避免这种情况。

答案 1 :(得分:0)

看看SCNShape,它从Bézier曲线生成SceneKit几何体。